diff --git a/Appendix-RST/README.rst b/Appendix-RST/README.rst deleted file mode 100644 index 1908fc2..0000000 --- a/Appendix-RST/README.rst +++ /dev/null @@ -1,86 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides entry, retrieval, and reporting on ABQ Agrilabs laboratory data. - -Features --------- - -* Enter data through validated form -* View historical data -* SQL Database storage -* Generate charts and plots -* Upload CSV extracts to corporate servers - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - -One of the following operating systems: - -* **Microsoft Windows**: 64-bit Windows 10 or higher -* **Apple macOS**: 64-bit High Sierra or higher -* **Linux**: x86_64 with kernel 4.4.0 or higher. *Debian 10 or Ubuntu 20.04 (or newer) recommended.* - -Installation -============ - -Windows -------- - -Double-click the ``ABQ_Data_Entry-1.0-win64.msi`` file to launch the installation wizard. -Shortcuts will appear on your desktop and in the menu after the wizard completes. - -macOS ------ - -Double-click the ``ABQ_Data_Enter-1.0.dmg`` file to open it, -then drag the ``ABQ-Data-Entry`` application to your desktop or Applications folder. - - -Linux ------ -Extract ``abq_data_entry_1.0.tar.gz`` into a directory on your system. -``/opt/abq`` is recommended. You can then execute the ``abq`` file from that directory. - -You may wish to create a script in the ``/usr/local/bin/`` folder, like so:: - - #!/bin/sh - # /usr/local/bin/abq - - cd /opt/abq - ./abq $@ - -This way you can launch abq from anywhere on the system by typing ``abq``. - -Configuration -============= - -Configuration for the application is stored in the ``abq_settings.json`` file -in a directory appropriate to your OS. Refer to this table: - -========== ============================================== -System Directory -========== ============================================== -Linux, BSD ``$XDG_HOME/`` if defined, else ``~/.config/`` -macOS ``~/Library/Application Support/`` -Windows ``%HOME%\AppData\Local`` -========== ============================================== - -The configuration file should be used to set the host and port of the database server, -the connection properties for corporate REST and SFTP servers, and the call-sign for the -weather station nearest the facility. Other configuration options can be configured -from within the application. - -General Notes -============= - -Please report all bugs to the data analysis department at the Bloomington, IN facility. diff --git a/Appendix-RST/abq_stylesheet.css b/Appendix-RST/abq_stylesheet.css deleted file mode 100644 index 7931da3..0000000 --- a/Appendix-RST/abq_stylesheet.css +++ /dev/null @@ -1,94 +0,0 @@ -BODY { - background-color: #DDF; - font-family: Times New Roman, Serif; - font-size: 16pt; - margin: 0; -} - -h1.title { - font-variant: small-caps; - font-size: 20pt; - text-decoration: none; - border-bottom: 4px double silver; - background-color: navy; - color: #EEE; - margin: 0; - padding: .5em 1em; - text-shadow: 2px 2px 5px red; - text-align: center; -} - -h1 { - font-size: 1.3em; - text-decoration: underline; -} - -h2 { - font-size: 1.1em; -} - -UL { - padding-left: 2em; -} - -LI { - line-height: 1em; - margin: 0; -} - -LI P { - margin: .25em; - padding: 0; -} - -pre.literal-block { - background-color: #EEE; - padding: 1em 3em; - border: 2px inset silver; -} - -.literal { - background-color: #EEE; - border: 1px solid silver; - font-family: Mono; -} - -.document { - padding: 0; - margin-left: auto; - margin-right: auto; - max-width: 50em; - box-shadow: 4px 4px 10px black; - background-color: #EEF; -} - -.document>.section { - padding: .5em 2em 0 1em; -} - - -TABLE { - border: 1px solid silver; - width: 100%; -} - -TABLE TH { - border: 1px solid silver; - border-collapse: collapse; - background-color: #CCC; - text-align: left; - font-weight: bold; - padding: 0; -} - -TABLE TD { - border: 1px solid silver; - border-collapse: collapse; - background-color: #EEE; - padding: 0; -} - -TABLE TD P { - padding: 0; - margin: .25em; -} diff --git a/Chapter01/banana_survey.py b/Chapter01/banana_survey.py deleted file mode 100644 index 1f62e6c..0000000 --- a/Chapter01/banana_survey.py +++ /dev/null @@ -1,180 +0,0 @@ -"""A banana preferences survey written in Python with Tkinter""" - -import tkinter as tk - -# Create the root window -root = tk.Tk() - -# set the title -root.title('Banana interest survey') - -# set the root window size -root.geometry('640x480+300+300') -root.resizable(False, False) - -########### -# Widgets # -########### - -# Use a Label to show the title -# 'font' lets us set a font -title = tk.Label( - root, - text='Please take the survey', - font=('Arial 16 bold'), - bg='brown', - fg='#FF0' -) - -# Use an Entry to get a string -name_label = tk.Label(root, text='What is your name?') -name_inp = tk.Entry(root) - -# Use Checkbutton to get a boolean -eater_inp = tk.Checkbutton( - root, - text='Check this box if you eat bananas' -) - -# Spinboxes are good for number entry -num_label = tk.Label( - root, - text='How many bananas do you eat per day?' -) -num_inp = tk.Spinbox(root, from_=0, to=1000, increment=1) - -# Listbox is good for choices - -color_label = tk.Label( - root, - text='What is the best color for a banana?' -) -color_inp = tk.Listbox(root, height=1) # Only show selected item -# add choices -color_choices = ( - 'Any', - 'Green', - 'Green-Yellow', - 'Yellow', - 'Brown spotted', - 'Black' -) -for choice in color_choices: - # END is a tkinter constant that means the end of an input - color_inp.insert(tk.END, choice) - - -# RadioButtons are good for small choices - -plantain_label = tk.Label(root, text='Do you eat plantains?') -# Use a Frame to keep widgets together -plantain_frame = tk.Frame(root) -plantain_yes_inp = tk.Radiobutton(plantain_frame, text='Yes') -plantain_no_inp = tk.Radiobutton(plantain_frame, text='Ewww, no!') - -# The Text widget is good for long pieces of text -banana_haiku_label = tk.Label(root, text='Write a haiku about bananas') -banana_haiku_inp = tk.Text(root, height=3) - -# Buttons are used to trigger actions - -submit_btn = tk.Button(root, text='Submit Survey') - -# Use a label to display a line of output -# 'anchor' sets where the text is stuck if the label is wider than needed. -# 'justify' determines how multiple lines of text are aligned -output_line = tk.Label(root, text='', anchor='w', justify='left') - - -####################### -# Geometry Management # -####################### -# Using Grid instead of pack -# Put our widgets on the root window -#title.grid() -# columnspan allows the widget to span multiple columns -title.grid(columnspan=2) - -# add name label and input -# Column defaults to 0 -name_label.grid(row=1, column=0) - -# The grid automatically expands -# when we add a widget to the next row or column -name_inp.grid(row=1, column=1) - -# 'sticky' attaches the widget to the named sides, -# so it will expand with the grid -eater_inp.grid(row=2, columnspan=2, sticky='we') -# tk constants can be used instead of strings -num_label.grid(row=3, sticky=tk.W) -num_inp.grid(row=3, column=1, sticky=(tk.W + tk.E)) - -#padx and pady can still be used to add horizontal or vertical padding -color_label.grid(row=4, columnspan=2, sticky=tk.W, pady=10) -color_inp.grid(row=5, columnspan=2, sticky=tk.W + tk.E, padx=25) - -# We can still use pack on the plantain frame. -# pack and grid can be mixed in a layout as long as we don't -# use them in the same frame -plantain_yes_inp.pack(side='left', fill='x', ipadx=10, ipady=5) -plantain_no_inp.pack(side='left', fill='x', ipadx=10, ipady=5) -plantain_label.grid(row=6, columnspan=2, sticky=tk.W) -plantain_frame.grid(row=7, columnspan=2, sticky=tk.W) - -# Sticky on all sides will allow the widget to fill vertical and horizontal -banana_haiku_label.grid(row=8, sticky=tk.W) -banana_haiku_inp.grid(row=9, columnspan=2, sticky='NSEW') - -# Add the button and output -submit_btn.grid(row=99) -output_line.grid(row=100, columnspan=2, sticky='NSEW') - -# columnconfigure can be used to set options on the columns of the grid -# 'weight' means that column will be preferred for expansion -root.columnconfigure(1, weight=1) - -# rowconfigure works for rows -root.rowconfigure(99, weight=2) -root.rowconfigure(100, weight=1) - -##################### -# Add some behavior # -##################### - -def on_submit(): - """To be run when the user submits the form""" - - # Many widgets use "get" to retrieve contents - name = name_inp.get() - # spinboxes return a str, not a float or int! - number = num_inp.get() - # Listboxes are more involved - selected_idx = color_inp.curselection() - if selected_idx: - color = color_inp.get(selected_idx) - else: - color = '' - # We're going to need some way to get our button values! - # banana_eater = ???? - - # Text widgets require a range - haiku = banana_haiku_inp.get('1.0', tk.END) - - # Update the text in our output - message = ( - f'Thanks for taking the survey, {name}.\n' - f'Enjoy your {number} {color} bananas!' - ) - output_line.configure(text=message) - print(haiku) - - -# configure the button to trigger submission -submit_btn.configure(command=on_submit) - -############### -# Execute App # -############### - -root.mainloop() diff --git a/Chapter01/banana_survey_variables.py b/Chapter01/banana_survey_variables.py deleted file mode 100644 index 013b329..0000000 --- a/Chapter01/banana_survey_variables.py +++ /dev/null @@ -1,217 +0,0 @@ -"""A banana preferences survey written in Python with Tkinter""" - -import tkinter as tk - -# Create the root window -root = tk.Tk() - -# set the title -root.title('Banana interest survey') - -# set the root window size -root.geometry('640x480+300+300') -root.resizable(False, False) - -########### -# Widgets # -########### - -# Use a Label to show the title -# 'font' lets us set a font -title = tk.Label( - root, - text='Please take the survey', - font=('Arial 16 bold'), - bg='brown', - fg='#FF0' -) - - -# Use string vars for strings -name_var = tk.StringVar(root) -name_label = tk.Label(root, text='What is your name?') -name_inp = tk.Entry(root, textvariable=name_var) - -# Use boolean var for True/False -eater_var = tk.BooleanVar() -eater_inp = tk.Checkbutton( - root, variable=eater_var, text='Check this box if you eat bananas' -) - -# Use int var for whole numbers -# Value can set a default -num_var = tk.IntVar(value=3) -num_label = tk.Label(text='How many bananas do you eat per day?') -# note that even with an intvar, the key is still 'textvariable' -num_inp = tk.Spinbox( - root, - textvariable=num_var, - from_=0, - to=1000, - increment=1 -) - -# Listboxes don't work well with variables, -# However OptionMenu works great! -color_var = tk.StringVar(value='Any') -color_label = tk.Label( - root, - text='What is the best color for a banana?' -) -color_choices = ( - 'Any', 'Green', 'Green Yellow', 'Yellow', 'Brown Spotted', 'Black' -) -color_inp = tk.OptionMenu( - root, color_var, *color_choices -) - -plantain_label = tk.Label(root, text='Do you eat plantains?') -# Use a Frame to keep widgets together -plantain_frame = tk.Frame(root) - -# We can use any kind of var with Radiobuttons, -# as long as each button's 'value' property is the -# correct type -plantain_var = tk.BooleanVar() -# The radio buttons are connected by using the same variable -# The value of the var will be set to the button's 'value' property value -plantain_yes_inp = tk.Radiobutton( - plantain_frame, - text='Yes', - value=True, - variable=plantain_var -) -plantain_no_inp = tk.Radiobutton( - plantain_frame, - text='Ewww, no!', - value=False, - variable=plantain_var -) - -# The Text widget doesn't support variables, sadly -# There is no analogous widget that does -banana_haiku_label = tk.Label(root, text='Write a haiku about bananas') -banana_haiku_inp = tk.Text(root, height=3) - -# Buttons are used to trigger actions - -submit_btn = tk.Button(root, text='Submit Survey') - -# Labels can use a StringVar for their contents -output_var = tk.StringVar(value='') -output_line = tk.Label( - root, - textvariable=output_var, - anchor='w', - justify='left' -) - - -####################### -# Geometry Management # -####################### -# Using Grid instead of pack -# Put our widgets on the root window -#title.grid() -# columnspan allows the widget to span multiple columns -title.grid(columnspan=2) - -# add name label and input -# Column defaults to 0 -name_label.grid(row=1, column=0) - -# The grid automatically expands -# when we add a widget to the next row or column -name_inp.grid(row=1, column=1) - -# 'sticky' attaches the widget to the named sides, -# so it will expand with the grid -eater_inp.grid(row=2, columnspan=2, sticky='we') -# tk constants can be used instead of strings -num_label.grid(row=3, sticky=tk.W) -num_inp.grid(row=3, column=1, sticky=(tk.W + tk.E)) - -#padx and pady can still be used to add horizontal or vertical padding -color_label.grid(row=4, columnspan=2, sticky=tk.W, pady=10) -color_inp.grid(row=5, columnspan=2, sticky=tk.W + tk.E, padx=25) - -# We can still use pack on the plantain frame. -# pack and grid can be mixed in a layout as long as we don't -# use them in the same frame -plantain_yes_inp.pack(side='left', fill='x', ipadx=10, ipady=5) -plantain_no_inp.pack(side='left', fill='x', ipadx=10, ipady=5) -plantain_label.grid(row=6, columnspan=2, sticky=tk.W) -plantain_frame.grid(row=7, columnspan=2, stick=tk.W) - -# Sticky on all sides will allow the widget to fill vertical and horizontal -banana_haiku_label.grid(row=8, sticky=tk.W) -banana_haiku_inp.grid(row=9, columnspan=2, sticky='NSEW') - -# Add the button and output -submit_btn.grid(row=99) -output_line.grid(row=100, columnspan=2, sticky='NSEW') - -# columnconfigure can be used to set options on the columns of the grid -# 'weight' means that column will be preferred for expansion -root.columnconfigure(1, weight=1) - -# rowconfigure works for rows -root.rowconfigure(99, weight=2) -root.rowconfigure(100, weight=1) - -##################### -# Add some behavior # -##################### - -def on_submit(): - """To be run when the user submits the form""" - - # Vars all use 'get()' to retreive their variables - name = name_var.get() - # Because we used an IntVar, .get() will try to convert - # the contents of num_var to int. - try: - number = num_var.get() - except tk.TclError: - number = 10000 - - # With the variable, OptionMenu makes things simple - color = color_var.get() - - # Checkbutton and Radiobutton values are now simple - banana_eater = eater_var.get() - plantain_eater = plantain_var.get() - - # Text widgets require a range - haiku = banana_haiku_inp.get('1.0', tk.END) - - # Update the text in our output - message = f'Thanks for taking the survey, {name}.\n' - - if not banana_eater: - message += "Sorry you don't like bananas!\n" - - else: - message += f'Enjoy your {number} {color} bananas!\n' - - if plantain_eater: - message += 'Enjoy your plantains!' - else: - message += 'May you successfully avoid plantains!' - - if haiku.strip(): - message += f'\n\nYour Haiku:\n{haiku}' - - # Set the value of a variable using .set() - # DON'T DO THIS: output_var = 'my string' - output_var.set(message) - - -# configure the button to trigger submission -submit_btn.configure(command=on_submit) - -############### -# Execute App # -############### - -root.mainloop() diff --git a/Chapter01/hello_tkinter.py b/Chapter01/hello_tkinter.py deleted file mode 100644 index 3a18a3d..0000000 --- a/Chapter01/hello_tkinter.py +++ /dev/null @@ -1,16 +0,0 @@ -"""Hello World application for Tkinter""" - -# Import tkinter -import tkinter as tk - -# Create a root window -root = tk.Tk() - -# Create a widget -label = tk.Label(root, text="Hello World") - -# Place the label on the root window -label.pack() - -# Run the event loop -root.mainloop() diff --git a/Chapter02/abq_data_entry_spec.rst b/Chapter02/abq_data_entry_spec.rst deleted file mode 100644 index 75164db..0000000 --- a/Chapter02/abq_data_entry_spec.rst +++ /dev/null @@ -1,102 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - -Description ------------ -This program facilitates entry of laboratory observations -into a CSV file. - -Requirements ------------- - -Functional Requirements: - - * Allow all relevant, valid data to be entered, - as per the data dictionary. - * Append entered data to a CSV file: - - The CSV file must have a filename of - abq_data_record_CURRENTDATE.csv, where CURRENTDATE is the date - of the laboratory observations in ISO format (Year-month-day). - - The CSV file must include all fields. - listed in the data dictionary. - - The CSV headers will avoid cryptic abbreviations. - * Enforce correct datatypes per field. - -Non-functional Requirements: - - * Enforce reasonable limits on data entered, per the data dict. - * Auto-fill data to save time. - * Suggest likely correct values. - * Provide a smooth and efficient workflow. - * Store data in a format easily understandable by Python. - -Functionality Not Required --------------------------- - -The program does not need to: - - * Allow editing of data. - * Allow deletion of data. - -Users can perform both actions in LibreOffice if needed. - - -Limitations ------------ - -The program must: - - * Be efficiently operable by keyboard-only users. - * Be accessible to color blind users. - * Run on Debian GNU/Linux. - * Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+--------+----+---------------+--------------------+ -|Field | Type |Unit| Valid Values |Description | -+============+========+====+===============+====================+ -|Date |Date | | |Date of record | -+------------+--------+----+---------------+--------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00| | -+------------+--------+----+---------------+--------------------+ -|Lab |String | | A - C |Lab ID | -+------------+--------+----+---------------+--------------------+ -|Technician |String | | |Technician name | -+------------+--------+----+---------------+--------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+--------+----+---------------+--------------------+ -|Seed |String | | 6-character |Seed sample ID | -|Sample | | | string | | -+------------+--------+----+---------------+--------------------+ -|Fault |Bool | | True, False |Environmental | -| | | | |sensor fault | -+------------+--------+----+---------------+--------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Humidity |Decimal |g/m³| 0.5 - 52.0 |Abs humidity at plot| -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Blossoms |Int | | 0 - 1000 |No. blossoms in plot| -+------------+--------+----+---------------+--------------------+ -|Fruit |Int | | 0 - 1000 |No. fruits in plot | -+------------+--------+----+---------------+--------------------+ -|Plants |Int | | 0 - 20 |No. plants in plot | -+------------+--------+----+---------------+--------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of | -|height | | | |plants in plot | -+------------+--------+----+---------------+--------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+--------+----+---------------+--------------------+ diff --git a/Chapter03/abq_data_entry_spec.rst b/Chapter03/abq_data_entry_spec.rst deleted file mode 100644 index 41d3c18..0000000 --- a/Chapter03/abq_data_entry_spec.rst +++ /dev/null @@ -1,102 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - -Description ------------ -This program facilitates entry of laboratory observations -into a CSV file. - -Functionality Required ----------------------- - -The program must: - - * allow all relevant, valid data to be entered, - as per the data dictionary - * append entered data to a CSV file: - - The CSV file must have a filename of - abq_data_record_CURRENTDATE.csv, where CURRENTDATE is the date - of the laboratory observations in ISO format (Year-month-day) - - The CSV file must include all fields - listed in the data dictionary - - The CSV headers will avoid cryptic abbreviations - * enforce correct datatypes per field - -The program should try, whenever possible, to: - - * enforce reasonable limits on data entered, per the data dict - * Auto-fill data to save time - * Suggest likely correct values - * Provide a smooth and efficient workflow - * Store data in a format easily understandable by Python - -Functionality Not Required --------------------------- - -The program does not need to: - - * Allow editing of data. - * Allow deletion of data. - -Users can perform both actions in LibreOffice if needed. - - -Limitations ------------ - -The program must: - - * Be efficiently operable by keyboard-only users. - * Be accessible to color blind users. - * Run on Debian GNU/Linux. - * Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+--------+----+---------------+--------------------+ -|Field | Type |Unit| Valid Values |Description | -+============+========+====+===============+====================+ -|Date |Date | | |Date of record | -+------------+--------+----+---------------+--------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00| | -+------------+--------+----+---------------+--------------------+ -|Lab |String | | A - C |Lab ID | -+------------+--------+----+---------------+--------------------+ -|Technician |String | | |Technician name | -+------------+--------+----+---------------+--------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+--------+----+---------------+--------------------+ -|Seed |String | | 6-character |Seed sample ID | -|sample | | | string | | -+------------+--------+----+---------------+--------------------+ -|Fault |Bool | | True, False |Environmental | -| | | | |Sensor Fault | -+------------+--------+----+---------------+--------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot. | -| | | | |blank on fault. | -+------------+--------+----+---------------+--------------------+ -|Humidity |Decimal |g/m³| 0.5 - 52.0 |Abs humidity at plot| -| | | | |blank on fault. | -+------------+--------+----+---------------+--------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -| | | | |blank on fault. | -+------------+--------+----+---------------+--------------------+ -|Blossoms |Int | | 0 - 1000 |No. blossoms in plot| -+------------+--------+----+---------------+--------------------+ -|Fruit |Int | | 0 - 1000 |No. fruits in plot | -+------------+--------+----+---------------+--------------------+ -|Plants |Int | | 0 - 20 |No. plants in plot | -+------------+--------+----+---------------+--------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of | -|height | | | |plants in plot | -+------------+--------+----+---------------+--------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+--------+----+---------------+--------------------+ diff --git a/Chapter03/data_entry_app.py b/Chapter03/data_entry_app.py deleted file mode 100644 index 22f3a64..0000000 --- a/Chapter03/data_entry_app.py +++ /dev/null @@ -1,298 +0,0 @@ -"""The ABQ Data Entry application - -Chapter 3 Version -""" - -# Tkinter imports -import tkinter as tk -from tkinter import ttk - -# For creating the filename -from datetime import datetime - -# For file operations -from pathlib import Path - -# For creating the CSV file -import csv - -# Create a dict to hold our variables -variables = dict() -# Variable to store the number of records saved -records_saved = 0 - -# Configure the root window -root = tk.Tk() -root.title('ABQ Data Entry Application') -root.columnconfigure(0, weight=1) - -# Application heading -ttk.Label( - root, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16) -).grid() - -#################### -# Data Record Form # -#################### - -# Build the data record form in a Frame -# to keep geometry management simpler -drf = ttk.Frame(root) -drf.grid(padx=10, sticky=(tk.E + tk.W)) -drf.columnconfigure(0, weight=1) - -############################## -# Record information Frame # -############################## -r_info = ttk.LabelFrame(drf, text='Record Information') -r_info.grid(sticky=(tk.W + tk.E)) -for i in range(3): - r_info.columnconfigure(i, weight=1 ) - -# Date -variables['Date'] = tk.StringVar() -ttk.Label(r_info, text='Date').grid(row=0, column=0) -tk.Entry( - r_info, textvariable=variables['Date'] -).grid(row=1, column=0, sticky=(tk.W + tk.E)) - -# Time -time_values = ['8:00', '12:00', '16:00', '20:00'] -variables['Time'] = tk.StringVar() -ttk.Label(r_info, text='Time').grid(row=0, column=1) -ttk.Combobox( - r_info, textvariable=variables['Time'], values=time_values -).grid(row=1, column=1, sticky=(tk.W + tk.E)) - -# Technician -variables['Technician'] = tk.StringVar() -ttk.Label(r_info, text='Technician').grid(row=0, column=2) -ttk.Entry( - r_info, textvariable=variables['Technician'] -).grid(row=1, column=2, sticky=(tk.W + tk.E)) - -# Lab -variables['Lab'] = tk.StringVar() -ttk.Label(r_info, text='Lab').grid(row=2, column=0) -labframe = ttk.Frame(r_info) -for lab in ('A', 'B', 'C'): - ttk.Radiobutton( - labframe, value=lab, text=lab, variable=variables['Lab'] -).pack(side=tk.LEFT, expand=True) -labframe.grid(row=3, column=0, sticky=(tk.W + tk.E)) - -# Plot -variables['Plot'] = tk.IntVar() -ttk.Label(r_info, text='Plot').grid(row=2, column=1) -ttk.Combobox( - r_info, - textvariable=variables['Plot'], - values=list(range(1, 21)) -).grid(row=3, column=1, sticky=(tk.W + tk.E)) - -# Seed Sample -variables['Seed Sample'] = tk.StringVar() -ttk.Label(r_info, text='Seed Sample').grid(row=2, column=2) -ttk.Entry( - r_info, - textvariable=variables['Seed Sample'] -).grid(row=3, column=2, sticky=(tk.W + tk.E)) - -################################# -# Environment information Frame # -################################# -e_info = ttk.LabelFrame(drf, text="Environment Data") -e_info.grid(sticky=(tk.W + tk.E)) -for i in range(3): - e_info.columnconfigure(i, weight=1) - -# Humidity -variables['Humidity'] = tk.DoubleVar() -ttk.Label(e_info, text="Humidity (g/m³)").grid(row=0, column=0) -ttk.Spinbox( - e_info, textvariable=variables['Humidity'], - from_=0.5, to=52.0, increment=0.01, -).grid(row=1, column=0, sticky=(tk.W + tk.E)) - -# Light -variables['Light'] = tk.DoubleVar() -ttk.Label(e_info, text='Light (klx)').grid(row=0, column=1) -ttk.Spinbox( - e_info, textvariable=variables['Light'], - from_=0, to=100, increment=0.01 -).grid(row=1, column=1, sticky=(tk.W + tk.E)) - -# Temperature -variables['Temperature'] = tk.DoubleVar() -ttk.Label(e_info, text='Temperature (°C)').grid(row=0, column=2) -ttk.Spinbox( - e_info, textvariable=variables['Temperature'], - from_=4, to=40, increment=.01 -).grid(row=1, column=2, sticky=(tk.W + tk.E)) - -# Equipment Fault -variables['Equipment Fault'] = tk.BooleanVar(value=False) -ttk.Checkbutton( - e_info, variable=variables['Equipment Fault'], - text='Equipment Fault' -).grid(row=2, column=0, sticky=tk.W, pady=5) - - -########################### -# Plant information Frame # -########################### -p_info = ttk.LabelFrame(drf, text="Plant Data") -p_info.grid(sticky=(tk.W + tk.E)) -for i in range(3): - p_info.columnconfigure(i, weight=1) - -# Plants -variables['Plants'] = tk.IntVar() -ttk.Label(p_info, text='Plants').grid(row=0, column=0) -ttk.Spinbox( - p_info, textvariable=variables['Plants'], - from_=0, to=20, increment=1 -).grid(row=1, column=0, sticky=(tk.W + tk.E)) - -# Blossoms -variables['Blossoms'] = tk.IntVar() -ttk.Label(p_info, text='Blossoms').grid(row=0, column=1) -ttk.Spinbox( - p_info, textvariable=variables['Blossoms'], - from_=0, to=1000, increment=1 -).grid(row=1, column=1, sticky=(tk.W + tk.E)) - -# Fruit -variables['Fruit'] = tk.IntVar() -ttk.Label(p_info, text='Fruit').grid(row=0, column=2) -ttk.Spinbox( - p_info, textvariable=variables['Fruit'], - from_=0, to=1000, increment=1 -).grid(row=1, column=2, sticky=(tk.W + tk.E)) - -# Min Height -variables['Min Height'] = tk.DoubleVar() -ttk.Label(p_info, text='Min Height (cm)').grid(row=2, column=0) -ttk.Spinbox( - p_info, textvariable=variables['Min Height'], - from_=0, to=1000, increment=0.01 -).grid(row=3, column=0, sticky=(tk.W + tk.E)) - -# Max Height -variables['Max Height'] = tk.DoubleVar() -ttk.Label(p_info, text='Max Height (cm)').grid(row=2, column=1) -ttk.Spinbox( - p_info, textvariable=variables['Max Height'], - from_=0, to=1000, increment=0.01 -).grid(row=3, column=1, sticky=(tk.W + tk.E)) - -# Med Height -variables['Med Height'] = tk.DoubleVar() -ttk.Label(p_info, text='Median Height (cm)').grid(row=2, column=2) -ttk.Spinbox( - p_info, textvariable=variables['Med Height'], - from_=0, to=1000, increment=0.01 -).grid(row=3, column=2, sticky=(tk.W + tk.E)) - - -################# -# Notes Section # -################# - -ttk.Label(drf, text="Notes").grid() -# we can't use a variable for a Text input -notes_inp = tk.Text(drf, width=75, height=10) -notes_inp.grid(sticky=(tk.W + tk.E)) - - -######################## -# Save & Reset Buttons # -######################## -buttons = ttk.Frame(drf) -buttons.grid(sticky=tk.E + tk.W) -save_button = ttk.Button(buttons, text='Save') -save_button.pack(side=tk.RIGHT) - -reset_button = ttk.Button(buttons, text='Reset') -reset_button.pack(side=tk.RIGHT) - -############## -# Status Bar # -############## - -# This is attached to the root window, not the form! -status_variable = tk.StringVar() -ttk.Label( - root, textvariable=status_variable -).grid(sticky=tk.W + tk.E, row=99, padx=10) - -############# -# Functions # -############# - - -def on_reset(): - """Called when reset button is clicked, or after save""" - - for variable in variables.values(): - if isinstance(variable, tk.BooleanVar): - variable.set(False) - else: - variable.set('') - - # reset notes_inp - notes_inp.delete('1.0', tk.END) - - -reset_button.configure(command=on_reset) - -def on_save(): - """Handle save button clicks""" - - global records_saved - # For now, we save to a hardcoded filename with a datestring. - # If it doesnt' exist, create it, - # otherwise just append to the existing file - datestring = datetime.today().strftime("%Y-%m-%d") - filename = f"abq_data_record_{datestring}.csv" - newfile = not Path(filename).exists() - - # get the data from the variables - data = dict() - fault = variables['Equipment Fault'].get() - for key, variable in variables.items(): - if fault and key in ('Light', 'Humidity', 'Temperature'): - data[key] = '' - else: - try: - data[key] = variable.get() - except tk.TclError: - status_variable.set( - f'Error in field: {key}. Data was not saved!') - return - # get the Text widget contents separately - data['Notes'] = notes_inp.get('1.0', tk.END) - - # Append the record to a CSV - with open(filename, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=data.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - - records_saved += 1 - status_variable.set( - f"{records_saved} records saved this session") - on_reset() - -save_button.configure(command=on_save) - -# Reset the form -on_reset() - -#################### -# Execute Mainloop # -#################### -root.mainloop() diff --git a/Chapter03/ttk_tour.py b/Chapter03/ttk_tour.py deleted file mode 100644 index 1f15fed..0000000 --- a/Chapter03/ttk_tour.py +++ /dev/null @@ -1,135 +0,0 @@ -"""A tour of ttk widgets we can use in our application""" - -import tkinter as tk -from tkinter import ttk - - -root = tk.Tk() - -my_string_var = tk.StringVar(value='Test') -my_int_var = tk.IntVar() -my_dbl_var = tk.DoubleVar() -my_bool_var = tk.BooleanVar() -pack_args = {"padx": 20, "pady": 20} - -def my_callback(*_): - print("Callback called!") - -# Entry - -myentry = ttk.Entry(root, textvariable=my_string_var, width=20) -myentry.pack(**pack_args) - -# Spinbox - -myspinbox = ttk.Spinbox( - root, - from_=0, to=100, increment=.01, - textvariable=my_int_var, - command=my_callback -) -myspinbox.pack(**pack_args) - -# Checkbutton - -mycheckbutton = ttk.Checkbutton( - root, - variable=my_bool_var, - textvariable=my_string_var, - command=my_callback -) -mycheckbutton.pack(**pack_args) - -mycheckbutton2 = ttk.Checkbutton( - root, - variable=my_dbl_var, - text='Would you like Pi?', - onvalue=3.14159, - offvalue=0, - underline=15 -) -mycheckbutton2.pack(**pack_args) - -# Radiobutton -buttons = tk.Frame(root) -buttons.pack() - -r1 = ttk.Radiobutton( - buttons, - variable=my_int_var, - value=1, - text='One' -) -r2 = ttk.Radiobutton( - buttons, - variable=my_int_var, - value=2, - text='Two' -) -r1.pack(side='left') -r2.pack(side='left') - -# Combobox Widget - -mycombo = ttk.Combobox( - root, textvariable=my_string_var, - values=['This option', 'That option', 'Another option'] -) -mycombo.pack(**pack_args) - -# Text widget - -mytext = tk.Text( - root, - undo=True, maxundo=100, - spacing1=10, spacing2=2, spacing3=5, - height=5, wrap='char' -) -mytext.pack(**pack_args) - -# insert a string at the beginning -mytext.insert('1.0', "I love my text widget!") -# insert a string into the current text -mytext.insert('1.2', 'REALLY ') -# get the whole string -mytext.get('1.0', tk.END) -# delete the last character. -# Note that there is always a newline character inserted automatically -# at the end of the input, so we backup 2 chars instead of 1. -mytext.delete('end - 2 chars') - - -# Button widget - -mybutton = ttk.Button( - root, - command=my_callback, - text='Click Me!', - default='active' -) -mybutton.pack(**pack_args) - -# LabelFrame Widget -mylabelframe = ttk.LabelFrame( - root, - text='Button frame' -) - -b1 = ttk.Button( - mylabelframe, - text='Button 1' -) -b2 = ttk.Button( - mylabelframe, - text='Button 2' -) -b1.pack() -b2.pack() -mylabelframe.pack(**pack_args) - -# Label Widget - -mylabel = ttk.Label(root, text='This is a label') -mylabel.pack(**pack_args) - -root.mainloop() diff --git a/Chapter04/banana.py b/Chapter04/banana.py deleted file mode 100644 index acbe6ee..0000000 --- a/Chapter04/banana.py +++ /dev/null @@ -1,109 +0,0 @@ -"""A sample class definition""" - -#################### -# Class Definition # -#################### - -class Banana: - """A tasty tropical fruit""" - -#################### -# Class Attributes # -#################### - - # class variables are shared by all objects in the class - food_group = 'fruit' - colors = ['green', 'green-yellow', 'yellow', 'brown spotted', 'black'] - -###################### -# Methods, instances # -###################### - - # Instance methods get the object as an automatic first argument - # We traditionally call it `self` - def peel(self): - """Peel the banana""" - self.peeled = True - - def set_color(self, color): - """Set the color of the banana""" - if color in self.colors: - # create instance variables by attaching them to `self` - self.color = color - else: - raise ValueError(f'A banana cannot be {color}!') - - # Class methods only have access to the class, not the instance - # The class is passed in as a first argument - @classmethod - def check_color(cls, color): - """Test a color string to see if it is valid.""" - return color in cls.colors - - @classmethod - def make_greenie(cls): - """Create a green banana object""" - banana = cls() - banana.set_color('green') - return banana - - # Static methods have no access to class or instance - @staticmethod - def estimate_calories(num_bananas): - """Given `num_bananas`, estimate the number of calories""" - return num_bananas * 105 - -################# -# Magic Methods # -################# - - # "Magic methods" define how our object responds to operators and built-ins - def __str__(self): - # "Magic Attributes" contain metadata about the object or class - return f'A {self.color} {self.__class__.__name__}' - - # __init__ is the most important Magic Method - def __init__(self, color='green'): - - if not self.check_color(color): - raise ValueError(f'A {self.__class__.__name__} cannot be {color}') - self.color = color - - # instance vars should be first declared in __init__ when possible - self.peeled = False - - -################################# -# Private and Protected Members # -################################# - __ripe_colors = ['yellow', 'brown spotted'] - - def _is_ripe(self): - """Protected method to see if the banana is ripe.""" - return self.color in self.__ripe_colors - - - def can_eat(self, must_be_ripe=False): - """Check if I can eat the banana.""" - if must_be_ripe and not self._is_ripe(): - return False - return True - -################ -# Sub-classing # -################ - -class RedBanana(Banana): - """Bananas of the red variety""" - - colors = ['green', 'orange', 'red', 'brown', 'black'] - botanical_name = 'red dacca' - - def set_color(self, color): - if color not in self.colors: - raise ValueError(f'A Red Banana cannot be {color}!') - - def peel(self): - # Use `super()` to access the parent class methods - super().peel() - print('It looks like a regular banana inside!') diff --git a/Chapter04/data_entry_app.py b/Chapter04/data_entry_app.py deleted file mode 100644 index 1d1105e..0000000 --- a/Chapter04/data_entry_app.py +++ /dev/null @@ -1,328 +0,0 @@ -"""The ABQ Data Entry Application - -Chapter 4 version -""" - -from datetime import datetime -from pathlib import Path -import csv -import tkinter as tk -from tkinter import ttk - -############################################## -# Fixing the Text widget to accept variables # -############################################## -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - -######################################### -# Creating a LabelInput compound widget # -######################################### - -class LabelInput(tk.Frame): - """A widget containing a label and input together.""" - - def __init__( - self, parent, label, var, input_class=ttk.Entry, - input_args=None, label_args=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in (ttk.Checkbutton, ttk.Button, ttk.Radiobutton): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = ttk.Radiobutton( - self.input, value=v, text=v, **input_args) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - else: - self.input = input_class(self, **input_args) - - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) - -####################################### -# Building our application components # -####################################### - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - def _add_frame(self, label, cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Create a dict to keep track of input widgets - self._vars = { - 'Date': tk.StringVar(), - 'Time': tk.StringVar(), - 'Technician': tk.StringVar(), - 'Lab': tk.StringVar(), - 'Plot': tk.IntVar(), - 'Seed Sample': tk.StringVar(), - 'Humidity': tk.DoubleVar(), - 'Light': tk.DoubleVar(), - 'Temperature': tk.DoubleVar(), - 'Equipment Fault': tk.BooleanVar(), - 'Plants': tk.IntVar(), - 'Blossoms': tk.IntVar(), - 'Fruit': tk.IntVar(), - 'Min Height': tk.DoubleVar(), - 'Max Height': tk.DoubleVar(), - 'Med Height': tk.DoubleVar(), - 'Notes': tk.StringVar() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # Record info section - r_info = self._add_frame("Record Information") - - # line 1 - LabelInput( - r_info, "Date", var=self._vars['Date'] - ).grid(row=0, column=0) - LabelInput( - r_info, "Time", input_class=ttk.Combobox, - var=self._vars['Time'], - input_args={"values": ["8:00", "12:00", "16:00", "20:00"]} - ).grid(row=0, column=1) - LabelInput( - r_info, "Technician", var=self._vars['Technician'] - ).grid(row=0, column=2) - - # line 2 - LabelInput( - r_info, "Lab", input_class=ttk.Radiobutton, - var=self._vars['Lab'], input_args={"values": ["A", "B", "C"]} - ).grid(row=1, column=0) - LabelInput( - r_info, "Plot", input_class=ttk.Combobox, var=self._vars['Plot'], - input_args={"values": list(range(1, 21))} - ).grid(row=1, column=1) - LabelInput( - r_info, "Seed Sample", var=self._vars['Seed Sample'] - ).grid(row=1, column=2) - - - - # Environment Data - e_info = self._add_frame("Environment Data") - - LabelInput( - e_info, "Humidity (g/m³)", - input_class=ttk.Spinbox, var=self._vars['Humidity'], - input_args={"from_": 0.5, "to": 52.0, "increment": .01} - ).grid(row=0, column=0) - LabelInput( - e_info, "Light (klx)", input_class=ttk.Spinbox, - var=self._vars['Light'], - input_args={"from_": 0, "to": 100, "increment": .01} - ).grid(row=0, column=1) - LabelInput( - e_info, "Temperature (°C)", - input_class=ttk.Spinbox, var=self._vars['Temperature'], - input_args={"from_": 4, "to": 40, "increment": .01} - ).grid(row=0, column=2) - LabelInput( - e_info, "Equipment Fault", - input_class=ttk.Checkbutton, var=self._vars['Equipment Fault'] - ).grid(row=1, column=0, columnspan=3) - - - # Plant Data section - p_info = self._add_frame("Plant Data") - - LabelInput( - p_info, "Plants", input_class=ttk.Spinbox, var=self._vars['Plants'], - input_args={"from_": 0, "to": 20} - ).grid(row=0, column=0) - LabelInput( - p_info, "Blossoms", input_class=ttk.Spinbox, - var=self._vars['Blossoms'], - input_args={"from_": 0, "to": 1000} - ).grid(row=0, column=1) - LabelInput( - p_info, "Fruit", input_class=ttk.Spinbox, var=self._vars['Fruit'], - input_args={"from_": 0, "to": 1000} - ).grid(row=0, column=2) - - # Height data - LabelInput( - p_info, "Min Height (cm)", - input_class=ttk.Spinbox, var=self._vars['Min Height'], - input_args={"from_": 0, "to": 1000, "increment": .01} - ).grid(row=1, column=0) - LabelInput( - p_info, "Max Height (cm)", - input_class=ttk.Spinbox, var=self._vars['Max Height'], - input_args={"from_": 0, "to": 1000, "increment": .01} - ).grid(row=1, column=1) - LabelInput( - p_info, "Median Height (cm)", - input_class=ttk.Spinbox, var=self._vars['Med Height'], - input_args={"from_": 0, "to": 1000, "increment": .01} - ).grid(row=1, column=2) - - - # Notes section - LabelInput( - self, "Notes", - input_class=BoundText, var=self._vars['Notes'], - input_args={"width": 75, "height": 10} - ).grid(sticky=(tk.W + tk.E), row=3, column=0) - - # buttons - buttons = ttk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=4) - self.savebutton = ttk.Button( - buttons, text="Save", command=self.master._on_save) - self.savebutton.pack(side=tk.RIGHT) - - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset) - self.resetbutton.pack(side=tk.RIGHT) - - # default the form - self.reset() - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - fault = self._vars['Equipment Fault'].get() - for key, variable in self._vars.items(): - if fault and key in ('Light', 'Humidity', 'Temperature'): - data[key] = '' - else: - try: - data[key] = variable.get() - except tk.TclError: - message = f'Error in field: {key}. Data was not saved!' - raise ValueError(message) - - return data - - def reset(self): - """Resets the form entries""" - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - -class Application(tk.Tk): - """Application root window""" - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - ttk.Label( - self, text="ABQ Data Entry Application", - font=("TkDefaultFont", 16) - ).grid(row=0) - - self.recordform = DataRecordForm(self) - self.recordform.grid(row=1, padx=10, sticky=(tk.W + tk.E)) - - # status bar - self.status = tk.StringVar() - ttk.Label( - self, textvariable=self.status - ).grid(sticky=(tk.W + tk.E), row=2, padx=10) - - self._records_saved = 0 - - def _on_save(self): - """Handles save button clicks""" - - # For now, we save to a hardcoded filename with a datestring. - # If it doesnt' exist, create it, - # otherwise just append to the existing file - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - newfile = not Path(filename).exists() - - try: - data = self.recordform.get() - except ValueError as e: - self.status.set(str(e)) - return - - with open(filename, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=data.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - - self._records_saved += 1 - self.status.set( - "{} records saved this session".format(self._records_saved)) - self.recordform.reset() - - -if __name__ == "__main__": - - app = Application() - app.mainloop() diff --git a/Chapter04/discrete_label_input_example.py b/Chapter04/discrete_label_input_example.py deleted file mode 100644 index 45a9af7..0000000 --- a/Chapter04/discrete_label_input_example.py +++ /dev/null @@ -1,10 +0,0 @@ -from tkinter import Frame, Label, Entry - -form = Frame() -label = Label(form, text='Name') -name_input = Entry(form) -label.grid(row=0, column=0) -name_input.grid(row=1, column=0) - -form.pack() -form.mainloop() diff --git a/Chapter04/tkinter_classes_demo.py b/Chapter04/tkinter_classes_demo.py deleted file mode 100644 index 3763dbb..0000000 --- a/Chapter04/tkinter_classes_demo.py +++ /dev/null @@ -1,142 +0,0 @@ -"""Demonstration of using classes with tkinter""" -import tkinter as tk -import json - - -############################# -# Improving Tkinter classes # -############################# - -# Create a JSONVar - -class JSONVar(tk.StringVar): - """A Tk variable that can hold dicts and lists""" - - def __init__(self, *args, **kwargs): - kwargs['value'] = json.dumps(kwargs.get('value')) - super().__init__(*args, **kwargs) - - def set(self, value, *args, **kwargs): - string = json.dumps(value) - super().set(string, *args, **kwargs) - - def get(self, *args, **kwargs): - """Get the list or dict value""" - string = super().get(*args, **kwargs) - return json.loads(string) - - -# Uncomment to try it, but comment this code before sub-classing Tk -#root = tk.Tk() -#var1 = JSONVar(root) -#var1.set([1, 2, 3, 4, 5]) -# -#var2 = JSONVar(root, value={'a': 10, 'b': 15}) -#print("Var1: ", var1.get()[1]) -#print("Var2: ", var2.get()['b']) -#root.mainloop() -#exit() - -############################# -# Creating compound widgets # -############################# - -class LabelInput(tk.Frame): - """A label and input combined together""" - - def __init__( - self, parent, label, inp_cls, - inp_args, *args, **kwargs - ): - super().__init__(parent, *args, **kwargs) - self.label = tk.Label(self, text=label, anchor='w') - self.input = inp_cls(self, **inp_args) - - # side-by-side layout - self.columnconfigure(1, weight=1) - self.label.grid(sticky=tk.E + tk.W) - self.input.grid(row=0, column=1, sticky=tk.E + tk.W) - - # label-on-top layout - #self.columnconfigure(0, weight=1) - #self.label.grid(sticky=tk.E + tk.W) - #self.input.grid(sticky=tk.E + tk.W) - - - -# Uncomment to try it, but comment this code again before sub-classing tk -#root = tk.Tk() -#li1 = LabelInput(root, 'Name', tk.Entry, {'bg': 'red'}) -#li1.grid() -#age_var = tk.IntVar(root, value=21) -#li2 = LabelInput( -# root, -# 'Age', -# tk.Spinbox, -# {'textvariable': age_var, 'from_': 10, 'to': 150} -#) -#li2.grid() -#root.mainloop() -#exit() - -############################## -# Building component objects # -############################## - -class MyForm(tk.Frame): - - def __init__(self, parent, data_var, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self.data_var = data_var - self._vars = { - 'name': tk.StringVar(), - 'age': tk.IntVar(value=2) - } - LabelInput( - self, - 'Name', - tk.Entry, - {'textvariable': self._vars['name']} - ).grid(sticky=tk.E + tk.W) - LabelInput( - self, - 'Age', - tk.Spinbox, - {'textvariable': self._vars['age'], 'from_': 10, 'to': 150} - ).grid(sticky=tk.E + tk.W) - tk.Button(self, text='Submit', command=self._on_submit).grid() - - def _on_submit(self): - data = { key: var.get() for key, var in self._vars.items() } - self.data_var.set(data) - - -# We can even subclass Tk - -class Application(tk.Tk): - """A simple form application""" - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.jsonvar = JSONVar() - self.output_var = tk.StringVar() - tk.Label(self, text='Please fill the form').grid(sticky='ew') - MyForm(self, self.jsonvar).grid(sticky='nsew') - tk.Label(self, textvariable=self.output_var).grid(sticky='ew') - self.columnconfigure(0, weight=1) - self.rowconfigure(1, weight=1) - - self.jsonvar.trace_add('write', self._on_data_change) - - def _on_data_change(self, *args, **kwargs): - data = self.jsonvar.get() - output = ''.join([ - f'{key} = {value}\n' - for key, value in data.items() - ]) - self.output_var.set(output) - -#root.mainloop() -if __name__ == '__main__': - app = Application() - app.mainloop() diff --git a/Chapter05/DateEntry.py b/Chapter05/DateEntry.py deleted file mode 100644 index 0168792..0000000 --- a/Chapter05/DateEntry.py +++ /dev/null @@ -1,61 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime - -class DateEntry(ttk.Entry): - """An Entry for ISO-style dates (Year-month-day)""" - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self.configure( - validate='all', - validatecommand=( - self.register(self._validate), - '%S', '%i', '%V', '%d' - ), - invalidcommand=(self.register(self._on_invalid), '%V') - ) - self.error = tk.StringVar() - - def _toggle_error(self, error=''): - self.error.set(error) - self.config(foreground='red' if error else 'black') - - def _validate(self, char, index, event, action): - - # reset error state - self._toggle_error() - valid = True - - # ISO dates only need digits and hyphens - if event == 'key': - if action == '0': - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - elif event == 'focusout': - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - valid = False - return valid - - def _on_invalid(self, event): - if event != 'key': - self._toggle_error('Not a valid date') - -if __name__ == '__main__': - root = tk.Tk() - entry = DateEntry(root) - entry.pack() - ttk.Label( - textvariable=entry.error, foreground='red' - ).pack() - - # add this so we can unfocus the DateEntry - ttk.Entry(root).pack() - root.mainloop() diff --git a/Chapter05/MixinExample.py b/Chapter05/MixinExample.py deleted file mode 100644 index f1a1b5b..0000000 --- a/Chapter05/MixinExample.py +++ /dev/null @@ -1,34 +0,0 @@ -"""This example shows the use of a mixin class""" - -class Fruit(): - - _taste = 'sweet' - - def taste(self): - print(f'It tastes {self._taste}') - -class PeelableMixin(): - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self._peeled = False - - def peel(self): - self._peeled = True - - def taste(self): - if not self._peeled: - print('I will peel it first') - self.peel() - super().taste() - -class Plantain(PeelableMixin, Fruit): - - _taste = 'starchy' - - def peel(self): - print('It has a tough peel!') - super().peel() - -plantain = Plantain() -plantain.taste() diff --git a/Chapter05/abq_data_entry_spec.rst b/Chapter05/abq_data_entry_spec.rst deleted file mode 100644 index d199a73..0000000 --- a/Chapter05/abq_data_entry_spec.rst +++ /dev/null @@ -1,96 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - - -Description ------------ -The program is being created to minimize data entry errors for laboratory measurements. - -Functionality Required ----------------------- - -The program must: - -* allow all relevant, valid data to be entered, as per the field chart -* append entered data to a CSV file - - The CSV file must have a filename of abq_data_record_CURRENTDATE.csv, - where CURRENTDATE is the date of the checks in ISO format (Year-month-day) - - The CSV file must have all the fields as per the chart -* enforce correct datatypes per field -* have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout -* prevent saving the record when errors are present - -The program should try, whenever possible, to: - -* enforce reasonable limits on data entered -* Auto-fill data -* Suggest likely correct values -* Provide a smooth and efficient workflow - -Functionality Not Required --------------------------- - -The program does not need to: - -* Allow editing of data. This can be done in LibreOffice if necessary. -* Allow deletion of data. - -Limitations ------------ - -The program must: - -* Be efficiently operable by keyboard-only users. -* Be accessible to color blind users. -* Run on Debian Linux. -* Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+----------+------+-------------+------------------------+ -|Field | Datatype | Units| Range |Descripton | -+============+==========+======+=============+========================+ -|Date |Date | | |Date of record | -+------------+----------+------+-------------+------------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, 20:00 | | -+------------+----------+------+-------------+------------------------+ -|Lab |String | | A - C |Lab ID | -+------------+----------+------+-------------+------------------------+ -|Technician |String | | |Technician name | -+------------+----------+------+-------------+------------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+----------+------+-------------+------------------------+ -|Seed |String | | |Seed sample ID | -|sample | | | | | -+------------+----------+------+-------------+------------------------+ -|Fault |Bool | | |Fault on environmental | -| | | | |sensor | -+------------+----------+------+-------------+------------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -+------------+----------+------+-------------+------------------------+ -|Humidity |Decimal |g/m³ | 0.5 - 52.0 |Abs humidity at plot | -+------------+----------+------+-------------+------------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -+------------+----------+------+-------------+------------------------+ -|Blossoms |Int | | 0 - 1000 |Num of blossoms in plot | -+------------+----------+------+-------------+------------------------+ -|Fruit |Int | | 0 - 1000 |Num of fruits in plot | -+------------+----------+------+-------------+------------------------+ -|Plants |Int | | 0 - 20 |Num of plants in plot | -+------------+----------+------+-------------+------------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest | -| | | | |plant in plot | -+------------+----------+------+-------------+------------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest | -| | | | |plant in plot | -+------------+----------+------+-------------+------------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of | -|height | | | |plants in plot | -+------------+----------+------+-------------+------------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+----------+------+-------------+------------------------+ diff --git a/Chapter05/data_entry_app.py b/Chapter05/data_entry_app.py deleted file mode 100644 index 5137f6c..0000000 --- a/Chapter05/data_entry_app.py +++ /dev/null @@ -1,723 +0,0 @@ -"""ABQ Data Entry - -Chapter 5 version -""" -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from pathlib import Path -import csv -from decimal import Decimal, InvalidOperation - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - self._toggle_error() - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - self._toggle_error(True) - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - """An Entry that requires a value""" - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - """An Entry that only accepts ISO Date strings""" - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - """A combobox that only takes values from its string list""" - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitive match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - -################## -# Module Classes # -################## - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - def __init__( - self, parent, label, var, input_class=ttk.Entry, - input_args=None, label_args=None, disable_var=None, - **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, - ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - else: - self.input = input_class(self, **input_args) - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) - - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - def _add_frame(self, label, cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Create a dict to keep track of input widgets - self._vars = { - 'Date': tk.StringVar(), - 'Time': tk.StringVar(), - 'Technician': tk.StringVar(), - 'Lab': tk.StringVar(), - 'Plot': tk.IntVar(), - 'Seed Sample': tk.StringVar(), - 'Humidity': tk.DoubleVar(), - 'Light': tk.DoubleVar(), - 'Temperature': tk.DoubleVar(), - 'Equipment Fault': tk.BooleanVar(), - 'Plants': tk.IntVar(), - 'Blossoms': tk.IntVar(), - 'Fruit': tk.IntVar(), - 'Min Height': tk.DoubleVar(), - 'Max Height': tk.DoubleVar(), - 'Med Height': tk.DoubleVar(), - 'Notes': tk.StringVar() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # Record info section - r_info = self._add_frame("Record Information") - - # line 1 - LabelInput( - r_info, "Date", var=self._vars['Date'], input_class=DateEntry - ).grid(row=0, column=0) - LabelInput( - r_info, "Time", input_class=ValidatedCombobox, - var=self._vars['Time'], - input_args={"values": ["8:00", "12:00", "16:00", "20:00"]} - ).grid(row=0, column=1) - LabelInput( - r_info, "Technician", var=self._vars['Technician'], - input_class=RequiredEntry - ).grid(row=0, column=2) - - # line 2 - LabelInput( - r_info, "Lab", input_class=ValidatedRadioGroup, - var=self._vars['Lab'], input_args={"values": ["A", "B", "C"]} - ).grid(row=1, column=0) - LabelInput( - r_info, "Plot", input_class=ValidatedCombobox, - var=self._vars['Plot'], input_args={"values": list(range(1, 21))} - ).grid(row=1, column=1) - LabelInput( - r_info, "Seed Sample", var=self._vars['Seed Sample'], - input_class=RequiredEntry - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame("Environment Data") - - LabelInput( - e_info, "Humidity (g/m³)", - input_class=ValidatedSpinbox, var=self._vars['Humidity'], - input_args={"from_": 0.5, "to": 52.0, "increment": .01}, - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=0) - LabelInput( - e_info, "Light (klx)", input_class=ValidatedSpinbox, - var=self._vars['Light'], - input_args={"from_": 0, "to": 100, "increment": .01}, - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=1) - LabelInput( - e_info, "Temperature (°C)", - input_class=ValidatedSpinbox, var=self._vars['Temperature'], - input_args={"from_": 4, "to": 40, "increment": .01}, - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=2) - LabelInput( - e_info, "Equipment Fault", - input_class=ttk.Checkbutton, var=self._vars['Equipment Fault'] - ).grid(row=1, column=0, columnspan=3) - - - # Plant Data section - p_info = self._add_frame("Plant Data") - - LabelInput( - p_info, "Plants", input_class=ValidatedSpinbox, - var=self._vars['Plants'], input_args={"from_": 0, "to": 20} - ).grid(row=0, column=0) - LabelInput( - p_info, "Blossoms", input_class=ValidatedSpinbox, - var=self._vars['Blossoms'], input_args={"from_": 0, "to": 1000} - ).grid(row=0, column=1) - LabelInput( - p_info, "Fruit", input_class=ValidatedSpinbox, - var=self._vars['Fruit'], input_args={"from_": 0, "to": 1000} - ).grid(row=0, column=2) - - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - LabelInput( - p_info, "Min Height (cm)", - input_class=ValidatedSpinbox, var=self._vars['Min Height'], - input_args={ - "from_": 0, "to": 1000, "increment": .01, - "max_var": max_height_var, "focus_update_var": min_height_var - } - ).grid(row=1, column=0) - LabelInput( - p_info, "Max Height (cm)", - input_class=ValidatedSpinbox, var=self._vars['Max Height'], - input_args={ - "from_": 0, "to": 1000, "increment": .01, - "min_var": min_height_var, "focus_update_var": max_height_var - } - ).grid(row=1, column=1) - LabelInput( - p_info, "Median Height (cm)", - input_class=ValidatedSpinbox, var=self._vars['Med Height'], - input_args={ - "from_": 0, "to": 1000, "increment": .01, - "min_var": min_height_var, "max_var": max_height_var - } - ).grid(row=1, column=2) - - - # Notes section - LabelInput( - self, "Notes", - input_class=BoundText, var=self._vars['Notes'], - input_args={"width": 75, "height": 10} - ).grid(sticky=(tk.W + tk.E), row=3, column=0) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=4) - self.savebutton = ttk.Button( - buttons, text="Save", command=self.master._on_save) - self.savebutton.pack(side=tk.RIGHT) - - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset) - self.resetbutton.pack(side=tk.RIGHT) - - # default the form - self.reset() - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = ( - self._vars['Plot'].label_widget.input.cget('values') - ) - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if plot not in ('', 0, plot_values[-1]): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(str(plot)) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - -class Application(tk.Tk): - """Application root window""" - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16) - ).grid(row=0) - - - self.recordform = DataRecordForm(self) - self.recordform.grid(row=1, padx=10, sticky=(tk.W + tk.E)) - - # status bar - self.status = tk.StringVar() - ttk.Label( - self, textvariable=self.status - ).grid(sticky=(tk.W + tk.E), row=3, padx=10) - - self._records_saved = 0 - - def _on_save(self): - """Handles save button clicks""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - return - - # For now, we save to a hardcoded filename with a datestring. - # If it doesnt' exist, create it, - # otherwise just append to the existing file - datestring = datetime.today().strftime("%Y-%m-%d") - filename = f"abq_data_record_{datestring}.csv" - newfile = not Path(filename).exists() - - data = self.recordform.get() - - with open(filename, 'a') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=data.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - - self._records_saved += 1 - self.status.set( - f"{self._records_saved} records saved this session" - ) - self.recordform.reset() - - -if __name__ == "__main__": - - app = Application() - app.mainloop() diff --git a/Chapter05/five_char_entry.py b/Chapter05/five_char_entry.py deleted file mode 100644 index 99bc49c..0000000 --- a/Chapter05/five_char_entry.py +++ /dev/null @@ -1,28 +0,0 @@ -"""Five Character Entry Demo""" - -import tkinter as tk - -root = tk.Tk() - -entry3 = tk.Entry(root) -entry3.grid() -entry3_error = tk.Label(root, fg='red') -entry3_error.grid() - -def only_five_chars(proposed): - return len(proposed) < 6 - -def only_five_chars_error(proposed): - entry3_error.configure( - text=f'{proposed} is too long, only 5 chars allowed.' - ) -validate3_ref = root.register(only_five_chars) -invalid3_ref = root.register(only_five_chars_error) - -entry3.configure( - validate='all', - validatecommand=(validate3_ref, '%P'), - invalidcommand=(invalid3_ref, '%P') -) - -root.mainloop() diff --git a/Chapter05/five_char_entry_class.py b/Chapter05/five_char_entry_class.py deleted file mode 100644 index 1802b9f..0000000 --- a/Chapter05/five_char_entry_class.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Five Character Entry widget, class-based""" - -import tkinter as tk -from tkinter import ttk - -class FiveCharEntry(ttk.Entry): - """An Entry that truncates to five characters on exit.""" - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self.error = tk.StringVar() - self.configure( - validate='all', - validatecommand=(self.register(self._validate), '%P'), - invalidcommand=(self.register(self._on_invalid), '%P') - ) - - def _validate(self, proposed): - return len(proposed) <= 5 - - def _on_invalid(self, proposed): - self.error.set( - f'{proposed} is too long, only 5 chars allowed!' - ) - -root = tk.Tk() -entry = FiveCharEntry(root) -error_label = ttk.Label( - root, textvariable=entry.error, foreground='red' -) -entry.grid() -error_label.grid() - -root.mainloop() diff --git a/Chapter05/validate_demo.py b/Chapter05/validate_demo.py deleted file mode 100644 index 2990cd0..0000000 --- a/Chapter05/validate_demo.py +++ /dev/null @@ -1,56 +0,0 @@ -import tkinter as tk - -root = tk.Tk() -entry = tk.Entry(root) -entry.grid() - -# create a pointless validation command -def always_good(): - return True - -validate_ref = root.register(always_good) - -entry.configure( - validate='all', - validatecommand=(validate_ref,) -) - -# a more useful validation command - - -entry2 = tk.Entry(root) -entry2.grid(pady=10) - -def no_t_for_me(proposed): - return 't' not in proposed - -validate2_ref = root.register(no_t_for_me) -entry2.configure( - validate='all', - validatecommand=(validate2_ref, '%P') -) - -# An Entry that displays an error - -entry3 = tk.Entry(root) -entry3.grid() -entry3_error = tk.Label(root, fg='red') -entry3_error.grid(pady=10) - -def only_five_chars(proposed): - return len(proposed) < 6 - -def only_five_chars_error(proposed): - entry3_error.configure( - text=f'{proposed} is too long, only 5 chars allowed.' - ) -validate3_ref = root.register(only_five_chars) -invalid3_ref = root.register(only_five_chars_error) - -entry3.configure( - validate='all', - validatecommand=(validate3_ref, '%P'), - invalidcommand=(invalid3_ref, '%P') -) - -root.mainloop() diff --git a/Chapter06/ABQ_Data_Entry/.gitignore b/Chapter06/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter06/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter06/ABQ_Data_Entry/README.rst b/Chapter06/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter06/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter06/ABQ_Data_Entry/abq_data_entry.py b/Chapter06/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter06/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter06/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter06/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter06/ABQ_Data_Entry/abq_data_entry/__main__.py b/Chapter06/ABQ_Data_Entry/abq_data_entry/__main__.py deleted file mode 100644 index 0ee2c5d..0000000 --- a/Chapter06/ABQ_Data_Entry/abq_data_entry/__main__.py +++ /dev/null @@ -1,7 +0,0 @@ -from abq_data_entry.application import Application -import os - -print(os.getcwd()) - -app = Application() -app.mainloop() diff --git a/Chapter06/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter06/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index 59d7bad..0000000 --- a/Chapter06/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,57 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from . import views as v -from . import models as m - - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - self.model = m.CSVModel() - - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16) - ).grid(row=0) - - self.recordform = v.DataRecordForm(self, self.model) - self.recordform.grid(row=1, padx=10, sticky=(tk.W + tk.E)) - self.recordform.bind('<>', self._on_save) - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - self._records_saved = 0 - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - return - - data = self.recordform.get() - self.model.save_record(data) - self._records_saved += 1 - self.status.set( - f"{self._records_saved} records saved this session" - ) - self.recordform.reset() diff --git a/Chapter06/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter06/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter06/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter06/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter06/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index 793e0c4..0000000 --- a/Chapter06/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,86 +0,0 @@ -import csv -from pathlib import Path -import os -from .constants import FieldTypes as FT -from decimal import Decimal -from datetime import datetime - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": { - 'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00'] - }, - "Technician": {'req': True, 'type': FT.string}, - "Lab": { - 'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C'] - }, - "Plot": { - 'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)] - }, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": { - 'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01 - }, - "Light": { - 'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01 - }, - "Temperature": { - 'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01 - }, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": { - 'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01 - }, - "Max Height": { - 'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01 - }, - "Med Height": { - 'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01 - }, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self): - - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data): - """Save a dict of data to the CSV file""" - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - - csvwriter.writerow(data) diff --git a/Chapter06/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter06/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index c623b5d..0000000 --- a/Chapter06/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,252 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - fields = self.model.fields - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # Record info section - r_info = self._add_frame("Record Information") - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - ).grid(row=0, column=1) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame("Environment Data") - - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - var=self._vars['Temperature'], - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data") - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - ).grid(row=0, column=2) - - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={ - "max_var": max_height_var, "focus_update_var": min_height_var - }).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={ - "min_var": min_height_var, "focus_update_var": max_height_var - }).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={ - "min_var": min_height_var, "max_var": max_height_var - }).grid(row=1, column=2) - - - # Notes section - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=3, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=4) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save) - self.savebutton.pack(side=tk.RIGHT) - - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset) - self.resetbutton.pack(side=tk.RIGHT) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if plot not in ('', 0, plot_values[-1]): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors diff --git a/Chapter06/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter06/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index dfdba6f..0000000 --- a/Chapter06/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,430 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - self._toggle_error() - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - self._toggle_error(True) - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - self.button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, - variable=self.variable, **self.button_args - ) - button.pack( - side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x' - ) - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - else: - self.input = input_class(self, **input_args) - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter06/ABQ_Data_Entry/docs/Application_layout.png b/Chapter06/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter06/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter06/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter06/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index 349be50..0000000 --- a/Chapter06/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,107 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - -Description ------------ -This program facilitates entry of laboratory observations -into a CSV file. - -Requirements ------------- - -Functional Requirements: - - * Allow all relevant, valid data to be entered, - as per the data dictionary. - * Append entered data to a CSV file: - - The CSV file must have a filename of - abq_data_record_CURRENTDATE.csv, where CURRENTDATE is the date - of the laboratory observations in ISO format (Year-month-day). - - The CSV file must include all fields. - listed in the data dictionary. - - The CSV headers will avoid cryptic abbreviations. - * Enforce correct datatypes per field. - * have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout - * prevent saving the record when errors are present - -Non-functional Requirements: - - * Enforce reasonable limits on data entered, per the data dict. - * Auto-fill data to save time. - * Suggest likely correct values. - * Provide a smooth and efficient workflow. - * Store data in a format easily understandable by Python. - -Functionality Not Required --------------------------- - -The program does not need to: - - * Allow editing of data. - * Allow deletion of data. - -Users can perform both actions in LibreOffice if needed. - - -Limitations ------------ - -The program must: - - * Be efficiently operable by keyboard-only users. - * Be accessible to color blind users. - * Run on Debian GNU/Linux. - * Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+--------+----+---------------+--------------------+ -|Field | Type |Unit| Valid Values |Description | -+============+========+====+===============+====================+ -|Date |Date | | |Date of record | -+------------+--------+----+---------------+--------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00| | -+------------+--------+----+---------------+--------------------+ -|Lab |String | | A - C |Lab ID | -+------------+--------+----+---------------+--------------------+ -|Technician |String | | |Technician name | -+------------+--------+----+---------------+--------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+--------+----+---------------+--------------------+ -|Seed |String | | 6-character |Seed sample ID | -|Sample | | | string | | -+------------+--------+----+---------------+--------------------+ -|Fault |Bool | | True, False |Environmental | -| | | | |sensor fault | -+------------+--------+----+---------------+--------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Humidity |Decimal |g/m³| 0.5 - 52.0 |Abs humidity at plot| -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Blossoms |Int | | 0 - 1000 |No. blossoms in plot| -+------------+--------+----+---------------+--------------------+ -|Fruit |Int | | 0 - 1000 |No. fruits in plot | -+------------+--------+----+---------------+--------------------+ -|Plants |Int | | 0 - 20 |No. plants in plot | -+------------+--------+----+---------------+--------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of | -|height | | | |plants in plot | -+------------+--------+----+---------------+--------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+--------+----+---------------+--------------------+ diff --git a/Chapter06/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter06/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter06/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter07/ABQ_Data_Entry/.gitignore b/Chapter07/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter07/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter07/ABQ_Data_Entry/README.rst b/Chapter07/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter07/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter07/ABQ_Data_Entry/abq_data_entry.py b/Chapter07/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter07/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter07/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter07/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter07/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter07/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index 03169bb..0000000 --- a/Chapter07/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,159 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog - -from . import views as v -from . import models as m -from .mainmenu import MainMenu - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - self.deiconify() - - # Create model - self.model = m.CSVModel() - - # Load settings - # self.settings = { - # 'autofill date': tk.BooleanVar(), - # 'autofill sheet data': tk.BoleanVar() - # } - self.settings_model = m.SettingsModel() - self._load_settings() - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Create the menu - menu = MainMenu(self, self.settings) - self.config(menu=menu) - event_callbacks = { - '<>': self._on_file_select, - '<>': lambda _: self.quit(), - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16) - ).grid(row=0) - - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.recordform.grid(row=1, padx=10, sticky=(tk.W + tk.E)) - self.recordform.bind('<>', self._on_save) - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self._records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - self.model.save_record(data) - self._records_saved += 1 - self.status.set( - "{} records saved this session".format(self._records_saved) - ) - self.recordform.reset() - - def _on_file_select(self, *_): - """Handle the file->select action""" - - filename = filedialog.asksaveasfilename( - title='Select the target file for saving records', - defaultextension='.csv', - filetypes=[('CSV', '*.csv *.CSV')] - ) - if filename: - self.model = m.CSVModel(filename=filename) - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._simple_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() diff --git a/Chapter07/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter07/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter07/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter07/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter07/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index 36b62ee..0000000 --- a/Chapter07/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,70 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import messagebox - -class MainMenu(tk.Menu): - """The Application's main menu""" - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def __init__(self, parent, settings, **kwargs): - """Constructor for MainMenu - - arguments: - parent - The parent widget - settings - a dict containing Tkinter variables - """ - super().__init__(parent, **kwargs) - self.settings = settings - - # The help menu - help_menu = tk.Menu(self, tearoff=False) - help_menu.add_command(label='About…', command=self.show_about) - - # The file menu - file_menu = tk.Menu(self, tearoff=False) - file_menu.add_command( - label="Select file…", - command=self._event('<>') - ) - - file_menu.add_separator() - file_menu.add_command( - label="Quit", - command=self._event('<>') - ) - - # The options menu - options_menu = tk.Menu(self, tearoff=False) - options_menu.add_checkbutton( - label='Autofill Date', - variable=self.settings['autofill date'] - ) - options_menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - # add the menus in order to the main menu - self.add_cascade(label='File', menu=file_menu) - self.add_cascade(label='Options', menu=options_menu) - self.add_cascade(label='Help', menu=help_menu) - - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo(title='About', message=about_message, detail=about_detail) diff --git a/Chapter07/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter07/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index 6fe7434..0000000 --- a/Chapter07/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,121 +0,0 @@ -import csv -from pathlib import Path -import json -import os - -from .constants import FieldTypes as FT -from decimal import Decimal -from datetime import datetime - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - - def save_record(self, data): - """Save a dict of data to the CSV file""" - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - - csvwriter.writerow(data) - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True} - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - self.filepath = Path.home() / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - with open(self.filepath, 'w') as fh: - json.dump(self.fields, fh) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.load(fh) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value diff --git a/Chapter07/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter07/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index 99b31ea..0000000 --- a/Chapter07/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,308 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # Record info section - r_info = self._add_frame("Record Information") - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - ).grid(row=0, column=1) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame("Environment Data") - - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - var=self._vars['Temperature'], - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data") - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - ).grid(row=0, column=2) - - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={ - "max_var": max_height_var, "focus_update_var": min_height_var - }, - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={ - "min_var": min_height_var, "focus_update_var": max_height_var - }, - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={ - "min_var": min_height_var, "max_var": max_height_var - }, - ).grid(row=1, column=2) - - - # Notes section - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=3, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=4) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save) - self.savebutton.pack(side=tk.RIGHT) - - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset) - self.resetbutton.pack(side=tk.RIGHT) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) diff --git a/Chapter07/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter07/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index 933f945..0000000 --- a/Chapter07/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,427 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - self._toggle_error() - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - self._toggle_error(True) - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - else: - self.input = input_class(self, **input_args) - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter07/ABQ_Data_Entry/docs/Application_layout.png b/Chapter07/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter07/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter07/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter07/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index 349be50..0000000 --- a/Chapter07/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,107 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - -Description ------------ -This program facilitates entry of laboratory observations -into a CSV file. - -Requirements ------------- - -Functional Requirements: - - * Allow all relevant, valid data to be entered, - as per the data dictionary. - * Append entered data to a CSV file: - - The CSV file must have a filename of - abq_data_record_CURRENTDATE.csv, where CURRENTDATE is the date - of the laboratory observations in ISO format (Year-month-day). - - The CSV file must include all fields. - listed in the data dictionary. - - The CSV headers will avoid cryptic abbreviations. - * Enforce correct datatypes per field. - * have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout - * prevent saving the record when errors are present - -Non-functional Requirements: - - * Enforce reasonable limits on data entered, per the data dict. - * Auto-fill data to save time. - * Suggest likely correct values. - * Provide a smooth and efficient workflow. - * Store data in a format easily understandable by Python. - -Functionality Not Required --------------------------- - -The program does not need to: - - * Allow editing of data. - * Allow deletion of data. - -Users can perform both actions in LibreOffice if needed. - - -Limitations ------------ - -The program must: - - * Be efficiently operable by keyboard-only users. - * Be accessible to color blind users. - * Run on Debian GNU/Linux. - * Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+--------+----+---------------+--------------------+ -|Field | Type |Unit| Valid Values |Description | -+============+========+====+===============+====================+ -|Date |Date | | |Date of record | -+------------+--------+----+---------------+--------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00| | -+------------+--------+----+---------------+--------------------+ -|Lab |String | | A - C |Lab ID | -+------------+--------+----+---------------+--------------------+ -|Technician |String | | |Technician name | -+------------+--------+----+---------------+--------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+--------+----+---------------+--------------------+ -|Seed |String | | 6-character |Seed sample ID | -|Sample | | | string | | -+------------+--------+----+---------------+--------------------+ -|Fault |Bool | | True, False |Environmental | -| | | | |sensor fault | -+------------+--------+----+---------------+--------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Humidity |Decimal |g/m³| 0.5 - 52.0 |Abs humidity at plot| -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Blossoms |Int | | 0 - 1000 |No. blossoms in plot| -+------------+--------+----+---------------+--------------------+ -|Fruit |Int | | 0 - 1000 |No. fruits in plot | -+------------+--------+----+---------------+--------------------+ -|Plants |Int | | 0 - 20 |No. plants in plot | -+------------+--------+----+---------------+--------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of | -|height | | | |plants in plot | -+------------+--------+----+---------------+--------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+--------+----+---------------+--------------------+ diff --git a/Chapter07/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter07/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter07/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter07/filedialog_demo.py b/Chapter07/filedialog_demo.py deleted file mode 100644 index e95f5df..0000000 --- a/Chapter07/filedialog_demo.py +++ /dev/null @@ -1,19 +0,0 @@ -from tkinter import filedialog - -source = filedialog.askopenfile( - mode='r', - title='Select a CSV file to copy', - filetypes=[('CSV', '*.csv *.CSV')]) - -if not source: - exit() - -destination = filedialog.asksaveasfile( - mode='w', - title='Select a destination file', - defaultextension='.csv', - filetypes=[('CSV', '*.csv *.CSV')]) - -destination.write(source.read()) -source.close() -destination.close() diff --git a/Chapter07/menu_demo.py b/Chapter07/menu_demo.py deleted file mode 100644 index f852241..0000000 --- a/Chapter07/menu_demo.py +++ /dev/null @@ -1,67 +0,0 @@ -import tkinter as tk - -root = tk.Tk() -root.geometry('200x150') -main_text = tk.StringVar(value='Hi') -label = tk.Label(root, textvariable=main_text) -label.pack(side='bottom') - -################### -# Create the Menu # -################### - -main_menu = tk.Menu(root) -root.config(menu=main_menu) - -main_menu.add('command', label='Quit', command=root.quit) - -##################### -# Add the Text Menu # -##################### - -text_menu = tk.Menu(main_menu, tearoff=False) -text_menu.add_command( - label='Set to "Hi"', - command=lambda: main_text.set('Hi') -) -text_menu.add_command( - label='Set to "There"', - command=lambda: main_text.set('There') -) -main_menu.add_cascade(label="Text", menu=text_menu) - -########################### -# Add the appearance menu # -########################### - -font_bold = tk.BooleanVar(value=False) -font_size = tk.IntVar(value=10) - -def set_font(*args): - size = font_size.get() - bold = 'bold' if font_bold.get() else '' - font_spec = f'TkDefaultFont {size} {bold}' - label.config(font=font_spec) - -font_bold.trace_add('write', set_font) -font_size.trace_add('write', set_font) -set_font() - - -# Create appearance menu -appearance_menu = tk.Menu(main_menu, tearoff=False) -main_menu.add_cascade(label="Appearance", menu=appearance_menu) - -# Create bold text checkbutton -appearance_menu.add_checkbutton(label="Bold", variable=font_bold) - -# Create size menu -size_menu = tk.Menu(appearance_menu, tearoff=False) -appearance_menu.add_cascade(label='Font size', menu=size_menu) -for size in range(8, 24, 2): - size_menu.add_radiobutton( - label="{} px".format(size), - value=size, variable=font_size - ) - -root.mainloop() diff --git a/Chapter07/messagebox_demo.py b/Chapter07/messagebox_demo.py deleted file mode 100644 index 2a5421c..0000000 --- a/Chapter07/messagebox_demo.py +++ /dev/null @@ -1,17 +0,0 @@ -import tkinter as tk -from tkinter import messagebox - -see_more = messagebox.askyesno( - title='See more?', - message='Would you like to see another box?', - detail='Click NO to quit' -) - -if not see_more: - exit() - -messagebox.showinfo( - title='You got it', - message="Ok, here's another dialog.", - detail='Hope you like it!' -) diff --git a/Chapter07/messagebox_demo_short.py b/Chapter07/messagebox_demo_short.py deleted file mode 100644 index df3e0ed..0000000 --- a/Chapter07/messagebox_demo_short.py +++ /dev/null @@ -1,8 +0,0 @@ -import tkinter as tk -from tkinter import messagebox - -messagebox.showinfo( - title='This is the title', - message="This is the message", - detail='This is the detail' -) diff --git a/Chapter07/simpledialog_demo.py b/Chapter07/simpledialog_demo.py deleted file mode 100644 index 1585011..0000000 --- a/Chapter07/simpledialog_demo.py +++ /dev/null @@ -1,17 +0,0 @@ -import tkinter as tk -from tkinter import simpledialog as sd - -root = tk.Tk() - -word = sd.askstring('Word', 'What is the word?') -if not word: - exit() -times = sd.askinteger('Times', f'How many {word}s do you want?') - -tk.Label( - root, - text=word * (times or 1), - wraplength=600, -).grid() - -root.mainloop() diff --git a/Chapter08/ABQ_Data_Entry/.gitignore b/Chapter08/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter08/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter08/ABQ_Data_Entry/README.rst b/Chapter08/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter08/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter08/ABQ_Data_Entry/abq_data_entry.py b/Chapter08/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter08/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter08/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter08/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter08/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter08/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index c08285a..0000000 --- a/Chapter08/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,217 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog - -from . import views as v -from . import models as m -from .mainmenu import MainMenu - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - self.deiconify() - - # Create model - self.model = m.CSVModel() - - # Load settings - # self.settings = { - # 'autofill date': tk.BooleanVar(), - # 'autofill sheet data': tk.BoleanVar() - # } - self.settings_model = m.SettingsModel() - self._load_settings() - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Create the menu - menu = MainMenu(self, self.settings) - self.config(menu=menu) - event_callbacks = { - '<>': self._on_file_select, - '<>': lambda _: self.quit(), - # new for ch8 - '<>': self._show_recordlist, - '<>': self._new_record, - - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16) - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.recordform.bind('<>', self._on_save) - self.notebook.add(self.recordform, text='Entry Form') - - - # The data record list - # new for ch8 - self.recordlist = v.RecordList(self) - self.notebook.insert(0, self.recordlist, text='Records') - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rownum = self.recordform.current_record - self.model.save_record(data, rownum) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - - def _on_file_select(self, *_): - """Handle the file->select action""" - - filename = filedialog.asksaveasfilename( - title='Select the target file for saving records', - defaultextension='.csv', - filetypes=[('CSV', '*.csv *.CSV')] - ) - if filename: - self.model = m.CSVModel(filename=filename) - self._populate_recordlist() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._simple_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - # new for ch8 - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the selected id from recordlist in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - else: - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) diff --git a/Chapter08/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter08/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter08/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter08/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter08/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index 2e28fe2..0000000 --- a/Chapter08/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,82 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import messagebox - -class MainMenu(tk.Menu): - """The Application's main menu""" - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def __init__(self, parent, settings, **kwargs): - """Constructor for MainMenu - - arguments: - parent - The parent widget - settings - a dict containing Tkinter variables - """ - super().__init__(parent, **kwargs) - self.settings = settings - - # The help menu - help_menu = tk.Menu(self, tearoff=False) - help_menu.add_command(label='About…', command=self.show_about) - - # The file menu - file_menu = tk.Menu(self, tearoff=False) - file_menu.add_command( - label="Select file…", - command=self._event('<>') - ) - - file_menu.add_separator() - file_menu.add_command( - label="Quit", - command=self._event('<>') - ) - - # The options menu - options_menu = tk.Menu(self, tearoff=False) - options_menu.add_checkbutton( - label='Autofill Date', - variable=self.settings['autofill date'] - ) - options_menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - # switch from recordlist to recordform - go_menu = tk.Menu(self, tearoff=False) - go_menu.add_command( - label="Record List", - command=self._event('<>') - ) - go_menu.add_command( - label="New Record", - command=self._event('<>') - ) - - # add the menus in order to the main menu - self.add_cascade(label='File', menu=file_menu) - self.add_cascade(label='Go', menu=go_menu) - self.add_cascade(label='Options', menu=options_menu) - self.add_cascade(label='Help', menu=help_menu) - - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo(title='About', message=about_message, detail=about_detail) diff --git a/Chapter08/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter08/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index cf5e158..0000000 --- a/Chapter08/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,167 +0,0 @@ -import csv -from pathlib import Path -import os -import json - -from .constants import FieldTypes as FT -from decimal import Decimal -from datetime import datetime - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data, rownum=None): - """Save a dict of data to the CSV file""" - - if rownum is None: - # This is a new record - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - else: - # This is an update - records = self.get_all_records() - records[rownum] = data - with open(self.file, 'w', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - csvwriter.writeheader() - csvwriter.writerows(records) - - def get_all_records(self): - """Read in all records from the CSV and return a list""" - if not self.file.exists(): - return [] - - with open(self.file, 'r', encoding='utf-8') as fh: - csvreader = csv.DictReader(fh.readlines()) - missing_fields = set(self.fields.keys()) - set(csvreader.fieldnames) - if len(missing_fields) > 0: - fields_string = ', '.join(missing_fields) - raise Exception( - f"File is missing fields: {fields_string}" - ) - records = list(csvreader) - - # Correct issue with boolean fields - trues = ('true', 'yes', '1') - bool_fields = [ - key for key, meta - in self.fields.items() - if meta['type'] == FT.boolean - ] - for record in records: - for key in bool_fields: - record[key] = record[key].lower() in trues - return records - - def get_record(self, rownum): - """Get a single record by row number - - Callling code should catch IndexError - in case of a bad rownum. - """ - - return self.get_all_records()[rownum] - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True} - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - self.filepath = Path.home() / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - json_string = json.dumps(self.fields) - with open(self.filepath, 'w') as fh: - fh.write(json_string) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.loads(fh.read()) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value diff --git a/Chapter08/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter08/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index 85fae58..0000000 --- a/Chapter08/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,409 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # new chapter 8 - # variable to track current record id - self.current_record = None - - # Label for displaying what record we're editing - self.record_label = ttk.Label(self) - self.record_label.grid(row=0, column=0) - - # Record info section - r_info = self._add_frame("Record Information") - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - ).grid(row=0, column=1) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame("Environment Data") - - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - var=self._vars['Temperature'], - disable_var=self._vars['Equipment Fault'] - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data") - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - ).grid(row=0, column=2) - - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={ - "max_var": max_height_var, "focus_update_var": min_height_var - }, - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={ - "min_var": min_height_var, "focus_update_var": max_height_var - }, - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={ - "min_var": min_height_var, "max_var": max_height_var - }, - ).grid(row=1, column=2) - - - # Notes section -- Update grid row value for ch8 - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 6} - ).grid(sticky="nsew", row=4, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=5) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save) - self.savebutton.pack(side=tk.RIGHT) - - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset) - self.resetbutton.pack(side=tk.RIGHT) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - # new for ch8 - def load_record(self, rownum, data=None): - self.current_record = rownum - if rownum is None: - self.reset() - self.record_label.config(text='New Record') - else: - self.record_label.config(text=f'Record #{rownum}') - for key, var in self._vars.items(): - var.set(data.get(key, '')) - try: - var.label_widget.input.trigger_focusout_validation() - except AttributeError: - pass - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) - - -class RecordList(tk.Frame): - """Display for CSV file contents""" - - column_defs = { - '#0': {'label': 'Row', 'anchor': tk.W}, - 'Date': {'label': 'Date', 'width': 150, 'stretch': True}, - 'Time': {'label': 'Time'}, - 'Lab': {'label': 'Lab', 'width': 40}, - 'Plot': {'label': 'Plot', 'width': 80} - } - default_width = 100 - default_minwidth = 10 - default_anchor = tk.CENTER - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self.columnconfigure(0, weight=1) - self.rowconfigure(0, weight=1) - - # create treeview - self.treeview = ttk.Treeview( - self, - columns=list(self.column_defs.keys())[1:], - selectmode='browse' - ) - self.treeview.grid(row=0, column=0, sticky='NSEW') - - # Configure treeview columns - for name, definition in self.column_defs.items(): - label = definition.get('label', '') - anchor = definition.get('anchor', self.default_anchor) - minwidth = definition.get('minwidth', self.default_minwidth) - width = definition.get('width', self.default_width) - stretch = definition.get('stretch', False) - self.treeview.heading(name, text=label, anchor=anchor) - self.treeview.column( - name, anchor=anchor, minwidth=minwidth, - width=width, stretch=stretch - ) - - self.treeview.bind('', self._on_open_record) - self.treeview.bind('', self._on_open_record) - - # configure scrollbar for the treeview - self.scrollbar = ttk.Scrollbar( - self, - orient=tk.VERTICAL, - command=self.treeview.yview - ) - self.treeview.configure(yscrollcommand=self.scrollbar.set) - self.scrollbar.grid(row=0, column=1, sticky='NSW') - - - def populate(self, rows): - """Clear the treeview and write the supplied data rows to it.""" - for row in self.treeview.get_children(): - self.treeview.delete(row) - - cids = self.treeview.cget('columns') - for rownum, rowdata in enumerate(rows): - values = [rowdata[cid] for cid in cids] - self.treeview.insert('', 'end', iid=str(rownum), - text=str(rownum), values=values) - - if len(rows) > 0: - self.treeview.focus_set() - self.treeview.selection_set('0') - self.treeview.focus('0') - - def _on_open_record(self, *args): - self.event_generate('<>') - - @property - def selected_id(self): - selection = self.treeview.selection() - return int(selection[0]) if selection else None diff --git a/Chapter08/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter08/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index 933f945..0000000 --- a/Chapter08/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,427 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - self._toggle_error() - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - self._toggle_error(True) - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - else: - self.input = input_class(self, **input_args) - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter08/ABQ_Data_Entry/docs/Application_layout.png b/Chapter08/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter08/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter08/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter08/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index fbf32d3..0000000 --- a/Chapter08/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,107 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - -Description ------------ -This program facilitates entry of laboratory observations -into a CSV file. - -Requirements ------------- - -Functional Requirements: - - * Allow all relevant, valid data to be entered, - as per the data dictionary. - * Append entered data to a CSV file: - - The CSV file must have a filename of - abq_data_record_CURRENTDATE.csv, where CURRENTDATE is the date - of the laboratory observations in ISO format (Year-month-day). - - The CSV file must include all fields. - listed in the data dictionary. - - The CSV headers will avoid cryptic abbreviations. - * Enforce correct datatypes per field. - * have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout - * prevent saving the record when errors are present - * Provide a UI for reading, updating, and appending data to the CSV file - -Non-functional Requirements: - - * Enforce reasonable limits on data entered, per the data dict. - * Auto-fill data to save time. - * Suggest likely correct values. - * Provide a smooth and efficient workflow. - * Store data in a format easily understandable by Python. - -Functionality Not Required --------------------------- - -The program does not need to: - - * Allow deletion of data. - -Users can perform both actions in LibreOffice if needed. - - -Limitations ------------ - -The program must: - - * Be efficiently operable by keyboard-only users. - * Be accessible to color blind users. - * Run on Debian GNU/Linux. - * Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+--------+----+---------------+--------------------+ -|Field | Type |Unit| Valid Values |Description | -+============+========+====+===============+====================+ -|Date |Date | | |Date of record | -+------------+--------+----+---------------+--------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00| | -+------------+--------+----+---------------+--------------------+ -|Lab |String | | A - C |Lab ID | -+------------+--------+----+---------------+--------------------+ -|Technician |String | | |Technician name | -+------------+--------+----+---------------+--------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+--------+----+---------------+--------------------+ -|Seed |String | | 6-character |Seed sample ID | -|Sample | | | string | | -+------------+--------+----+---------------+--------------------+ -|Fault |Bool | | True, False |Environmental | -| | | | |sensor fault | -+------------+--------+----+---------------+--------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Humidity |Decimal |g/m³| 0.5 - 52.0 |Abs humidity at plot| -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -| | | | |blank on fault | -+------------+--------+----+---------------+--------------------+ -|Blossoms |Int | | 0 - 1000 |No. blossoms in plot| -+------------+--------+----+---------------+--------------------+ -|Fruit |Int | | 0 - 1000 |No. fruits in plot | -+------------+--------+----+---------------+--------------------+ -|Plants |Int | | 0 - 20 |No. plants in plot | -+------------+--------+----+---------------+--------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest | -| | | | |plant in plot | -+------------+--------+----+---------------+--------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of | -|height | | | |plants in plot | -+------------+--------+----+---------------+--------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+--------+----+---------------+--------------------+ diff --git a/Chapter08/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter08/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter08/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter08/hierarchy_example.py b/Chapter08/hierarchy_example.py deleted file mode 100644 index 607b80e..0000000 --- a/Chapter08/hierarchy_example.py +++ /dev/null @@ -1,32 +0,0 @@ -import tkinter as tk -from tkinter import ttk - -berries = [ - {'number': '1', 'parent': '', 'value': 'Raspberry'}, - {'number': '4', 'parent': '1', 'value': 'Red Raspberry'}, - {'number': '5', 'parent': '1', 'value': 'Blackberry'}, - {'number': '2', 'parent': '', 'value': 'Banana'}, - {'number': '3', 'parent': '', 'value': 'Strawberry'} -] - -root = tk.Tk() - -tv = ttk.Treeview(root, columns=['value']) -tv.heading('#0', text='Node') -tv.heading('value', text='Value') -tv.grid(sticky='news') - -for berry in berries: - tv.insert( - berry['parent'], - 'end', - iid=berry['number'], - text=berry['number'], - values=[berry['value']] - ) - - - - - -root.mainloop() diff --git a/Chapter08/notebook_demo.py b/Chapter08/notebook_demo.py deleted file mode 100644 index a5bf102..0000000 --- a/Chapter08/notebook_demo.py +++ /dev/null @@ -1,52 +0,0 @@ -import tkinter as tk -from tkinter import ttk - - -root = tk.Tk() - -# create notebook -notebook = ttk.Notebook(root) -notebook.grid() - - -# Create some large widgets - -banana_facts = [ - 'Banana trees are of the genus Musa.', - 'Bananas are technically berries.', - 'All bananas contain small amounts of radioactive potassium.' - 'Bananas are used in paper and textile manufacturing.' -] - -plantain_facts = [ - 'Plantains are also of genus Musa.', - 'Plantains are starchier and less sweet than bananas', - 'Plantains are called "Cooking Bananas" since they are' - ' rarely eaten raw.' -] - -b_label = ttk.Label(notebook, text='\n\n'.join(banana_facts)) -p_label = ttk.Label(notebook, text='\n\n'.join(plantain_facts)) - -# Add the widgets to the notebook -notebook.add(b_label, text='Bananas', padding=20) -notebook.add(p_label, text='Plantains', padding=20) - -# we could also use insert: -# notebook.insert(1, p_label, text='Plantains', padding=20) - -# Set up underline - -notebook.tab(0, underline=0) -notebook.tab(1, underline=0) - -# enable keyboard controls for the tab -notebook.enable_traversal() - -# Select the first tab -#notebook.select(0) - -# or by widgets -notebook.select(p_label) - -root.mainloop() diff --git a/Chapter08/treeview_demo.py b/Chapter08/treeview_demo.py deleted file mode 100644 index bcd07c9..0000000 --- a/Chapter08/treeview_demo.py +++ /dev/null @@ -1,82 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from pathlib import Path - -# Set up root window -root = tk.Tk() - -# Create list of paths -paths = Path('.').glob('**/*') - - -# Create and configure treeview -tv = ttk.Treeview( - root, columns=['size', 'modified'], selectmode='none' -) -tv.heading('#0', text='Name') -tv.heading('size', text='Size', anchor='center') -tv.heading('modified', text='Modified', anchor='e') -tv.column('#0', stretch=True) -tv.column('size', width=200) - -tv.pack(expand=True, fill='both') - -# Populate Treeview -for path in paths: - meta = path.stat() - parent = str(path.parent) - if parent == '.': - parent = '' - tv.insert( - parent, - 'end', - iid=str(path), - text=str(path.name), - values=[meta.st_size, meta.st_mtime] - ) - -def sort(tv, col, parent='', reverse=False): - """Sort the given column of the treeview""" - - # build a sorting list - sort_index = list() - for iid in tv.get_children(parent): - sort_value = tv.set(iid, col) if col != '#0' else iid - sort_index.append((sort_value, iid)) - - # sort the list - sort_index.sort(reverse=reverse) - - # move each node according to its index in the sort list - for index, (_, iid) in enumerate(sort_index): - tv.move(iid, parent, index) - - # sort each child node - sort(tv, col, parent=iid, reverse=reverse) - - # If this is the top level, reset the headings for reverse sort - if parent == '': - tv.heading( - col, - command=lambda col=col: sort(tv, col, reverse=not reverse) - ) - -for cid in ['#0', 'size', 'modified']: - tv.heading(cid, command=lambda col=cid: sort(tv, col)) - - -status = tk.StringVar() -tk.Label(root, textvariable=status).pack(side=tk.BOTTOM) - -def show_directory_stats(*_): - clicked_path = Path(tv.focus()) - num_children = len(list(clicked_path.iterdir())) - status.set( - f'Directory: {clicked_path.name}, {num_children} children' - ) - - -tv.bind('<>', show_directory_stats) -tv.bind('<>', lambda _: status.set('')) - -root.mainloop() diff --git a/Chapter09/ABQ_Data_Entry/.gitignore b/Chapter09/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter09/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter09/ABQ_Data_Entry/README.rst b/Chapter09/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter09/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry.py b/Chapter09/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter09/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter09/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index f4fc3f2..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,259 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog -from tkinter import font - -from . import views as v -from . import models as m -from .mainmenu import MainMenu -from . import images - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Hide window while GUI is built - self.withdraw() - - # Set taskbar icon - self.taskbar_icon = tk.PhotoImage(file=images.ABQ_LOGO_64) - self.iconphoto(True, self.taskbar_icon) - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - self.deiconify() - - # Create model - self.model = m.CSVModel() - - # load settings - self.settings_model = m.SettingsModel() - self._load_settings() - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - - # Create the menu - menu = MainMenu(self, self.settings) - self.config(menu=menu) - event_callbacks = { - '<>': self._on_file_select, - '<>': lambda _: self.quit(), - '<>': self._show_recordlist, - '<>': self._new_record, - - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - # new for ch9 - self.logo = tk.PhotoImage(file=images.ABQ_LOGO_32) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16), - image=self.logo, - compound=tk.LEFT - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform_icon = tk.PhotoImage(file=images.FORM_ICON) - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.notebook.add( - self.recordform, text='Entry Form', - image=self.recordform_icon, compound=tk.LEFT - ) - self.recordform.bind('<>', self._on_save) - - - # The data record list - self.recordlist_icon = tk.PhotoImage(file=images.LIST_ICON) - self.recordlist = v.RecordList(self) - self.notebook.insert( - 0, self.recordlist, text='Records', - image=self.recordlist_icon, compound=tk.LEFT - ) - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rownum = self.recordform.current_record - self.model.save_record(data, rownum) - if rownum is not None: - self.recordlist.add_updated_row(rownum) - else: - rownum = len(self.model.get_all_records()) -1 - self.recordlist.add_inserted_row(rownum) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - - def _on_file_select(self, *_): - """Handle the file->select action""" - - filename = filedialog.asksaveasfilename( - title='Select the target file for saving records', - defaultextension='.csv', - filetypes=[('CSV', '*.csv *.CSV')] - ) - if filename: - self.model = m.CSVModel(filename=filename) - self._populate_recordlist() - self.recordlist.clear_tags() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._simple_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - # update font settings after loading them - self._set_font() - self.settings['font size'].trace_add('write', self._set_font) - self.settings['font family'].trace_add('write', self._set_font) - - # process theme - style = ttk.Style() - theme = self.settings.get('theme').get() - if theme in style.theme_names(): - style.theme_use(theme) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None, None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the Record selected recordlist id in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - return - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) - - # new chapter 9 - def _set_font(self, *_): - """Set the application's font""" - font_size = self.settings['font size'].get() - font_family = self.settings['font family'].get() - font_names = ( - 'TkDefaultFont', 'TkMenuFont', 'TkTextFont', 'TkFixedFont' - ) - for font_name in font_names: - tk_font = font.nametofont(font_name) - tk_font.config(size=font_size, family=font_family) diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter09/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/__init__.py b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/__init__.py deleted file mode 100644 index 57538d9..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from pathlib import Path - -# This gives us the parent directory of this file (__init__.py) -IMAGE_DIRECTORY = Path(__file__).parent - -ABQ_LOGO_16 = IMAGE_DIRECTORY / 'abq_logo-16x10.png' -ABQ_LOGO_32 = IMAGE_DIRECTORY / 'abq_logo-32x20.png' -ABQ_LOGO_64 = IMAGE_DIRECTORY / 'abq_logo-64x40.png' - -# PNG icons - -SAVE_ICON = IMAGE_DIRECTORY / 'file-2x.png' -RESET_ICON = IMAGE_DIRECTORY / 'reload-2x.png' -LIST_ICON = IMAGE_DIRECTORY / 'list-2x.png' -FORM_ICON = IMAGE_DIRECTORY / 'browser-2x.png' - - -# BMP icons -QUIT_BMP = IMAGE_DIRECTORY / 'x-2x.xbm' -ABOUT_BMP = IMAGE_DIRECTORY / 'question-mark-2x.xbm' diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png deleted file mode 100644 index 255f273..0000000 Binary files a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png and /dev/null differ diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png deleted file mode 100644 index 650add1..0000000 Binary files a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png and /dev/null differ diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png deleted file mode 100644 index be9458f..0000000 Binary files a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png and /dev/null differ diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png deleted file mode 100644 index 2a6efb0..0000000 Binary files a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png and /dev/null differ diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/file-2x.png b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/file-2x.png deleted file mode 100644 index 4196c44..0000000 Binary files a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/file-2x.png and /dev/null differ diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/list-2x.png b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/list-2x.png deleted file mode 100644 index 1fc4450..0000000 Binary files a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/list-2x.png and /dev/null differ diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm deleted file mode 100644 index 8981c9b..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define question_mark_2x_width 16 -#define question_mark_2x_height 16 -static unsigned char question_mark_2x_bits[] = { - 0xc0, 0x0f, 0xe0, 0x1f, 0x70, 0x38, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x18, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03 }; diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png deleted file mode 100644 index 2a79f16..0000000 Binary files a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png and /dev/null differ diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm b/Chapter09/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm deleted file mode 100644 index 940af96..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define x_2x_width 16 -#define x_2x_height 16 -static unsigned char x_2x_bits[] = { - 0x04, 0x10, 0x0e, 0x38, 0x1f, 0x7c, 0x3e, 0x7e, 0x7c, 0x3f, 0xf8, 0x1f, - 0xf0, 0x0f, 0xe0, 0x07, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0x7e, 0x3e, - 0x3f, 0x7c, 0x1e, 0x78, 0x0c, 0x30, 0x00, 0x00 }; diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter09/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index b6ff55f..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,166 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import font - -from . import images - -class MainMenu(tk.Menu): - """The Application's main menu""" - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def _create_icons(self): - - # must be done in a method because PhotoImage can't be created - # until there is a Tk instance. - # There isn't one when the class is defined, but there is when - # the instance is created. - self.icons = { - 'file_open': tk.PhotoImage(file=images.SAVE_ICON), - 'record_list': tk.PhotoImage(file=images.LIST_ICON), - 'new_record': tk.PhotoImage(file=images.FORM_ICON), - 'quit': tk.BitmapImage(file=images.QUIT_BMP, foreground='red'), - 'about': tk.BitmapImage( - file=images.ABOUT_BMP, foreground='#CC0', background='#A09' - ), - } - - def __init__(self, parent, settings, **kwargs): - """Constructor for MainMenu - - arguments: - parent - The parent widget - settings - a dict containing Tkinter variables - """ - super().__init__(parent, **kwargs) - self.settings = settings - self._create_icons() - - # Styles - self.styles = { - 'background': '#333', - 'foreground': 'white', - 'activebackground': '#777', - 'activeforeground': 'white', - 'relief': tk.GROOVE - } - self.configure(**self.styles) - - # The help menu - help_menu = tk.Menu(self, tearoff=False, **self.styles) - help_menu.add_command( - label='About…', - command=self.show_about, - image=self.icons['about'], - compound=tk.LEFT - ) - - # The file menu - file_menu = tk.Menu(self, tearoff=False, **self.styles) - file_menu.add_command( - label="Select file…", - command=self._event('<>'), - image=self.icons['file_open'], - compound=tk.LEFT - ) - - file_menu.add_separator() - file_menu.add_command( - label="Quit", - command=self._event('<>'), - image=self.icons['quit'], - compound=tk.LEFT - ) - - # The options menu - options_menu = tk.Menu(self, tearoff=False, **self.styles) - options_menu.add_checkbutton( - label='Autofill Date', - variable=self.settings['autofill date'] - ) - options_menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - size_menu = tk.Menu(options_menu, tearoff=False, **self.styles) - options_menu.add_cascade(label='Font Size', menu=size_menu) - for size in range(6, 17, 1): - size_menu.add_radiobutton( - label=size, value=size, - variable=self.settings['font size'] - ) - family_menu = tk.Menu(options_menu, tearoff=False, **self.styles) - options_menu.add_cascade(label='Font Family', menu=family_menu) - for family in font.families(): - family_menu.add_radiobutton( - label=family, value=family, - variable=self.settings['font family'] - ) - - style = ttk.Style() - themes_menu = tk.Menu(self, tearoff=False, **self.styles) - for theme in style.theme_names(): - themes_menu.add_radiobutton( - label=theme, value=theme, - variable=self.settings['theme'] - ) - options_menu.add_cascade(label='Theme', menu=themes_menu) - self.settings['theme'].trace_add('write', self._on_theme_change) - - - # switch from recordlist to recordform - go_menu = tk.Menu(self, tearoff=False, **self.styles) - go_menu.add_command( - label="Record List", - command=self._event('<>'), - image=self.icons['record_list'], - compound=tk.LEFT - ) - go_menu.add_command( - label="New Record", - command=self._event('<>'), - image=self.icons['new_record'], - compound=tk.LEFT - ) - - # add the menus in order to the main menu - self.add_cascade(label='File', menu=file_menu) - self.add_cascade(label='Go', menu=go_menu) - self.add_cascade(label='Options', menu=options_menu) - self.add_cascade(label='Help', menu=help_menu) - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo( - title='About', message=about_message, detail=about_detail - ) - @staticmethod - def _on_theme_change(*_): - """Popup a message about theme changes""" - message = "Change requires restart" - detail = ( - "Theme changes do not take effect" - " until application restart" - ) - messagebox.showwarning( - title='Warning', - message=message, - detail=detail - ) diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter09/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index 099d79c..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,170 +0,0 @@ -import csv -from pathlib import Path -import os -import json - -from .constants import FieldTypes as FT -from decimal import Decimal -from datetime import datetime - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data, rownum=None): - """Save a dict of data to the CSV file""" - - if rownum is None: - # This is a new record - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - else: - # This is an update - records = self.get_all_records() - records[rownum] = data - with open(self.file, 'w', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - csvwriter.writeheader() - csvwriter.writerows(records) - - def get_all_records(self): - """Read in all records from the CSV and return a list""" - if not self.file.exists(): - return [] - - with open(self.file, 'r', encoding='utf-8') as fh: - csvreader = csv.DictReader(fh.readlines()) - missing_fields = set(self.fields.keys()) - set(csvreader.fieldnames) - if len(missing_fields) > 0: - fields_string = ', '.join(missing_fields) - raise Exception( - f"File is missing fields: {fields_string}" - ) - records = list(csvreader) - - # Correct issue with boolean fields - trues = ('true', 'yes', '1') - bool_fields = [ - key for key, meta - in self.fields.items() - if meta['type'] == FT.boolean - ] - for record in records: - for key in bool_fields: - record[key] = record[key].lower() in trues - return records - - def get_record(self, rownum): - """Get a single record by row number - - Callling code should catch IndexError - in case of a bad rownum. - """ - - return self.get_all_records()[rownum] - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'} - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - self.filepath = Path.home() / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - json_string = json.dumps(self.fields) - with open(self.filepath, 'w') as fh: - fh.write(json_string) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.loads(fh.read()) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter09/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index a188493..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,510 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT -from . import images - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, style='', cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - if style: - frame.configure(style=style) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # new for ch9 - style = ttk.Style() - - # Frame styles - style.configure( - 'RecordInfo.TLabelframe', - background='khaki', padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe', background='lightblue', - padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe', - background='lightgreen', padx=10, pady=10 - ) - # Style the label Element as well - style.configure( - 'RecordInfo.TLabelframe.Label', background='khaki', - padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe.Label', - background='lightblue', padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe.Label', - background='lightgreen', padx=10, pady=10 - ) - - # Style for the form labels and buttons - style.configure('RecordInfo.TLabel', background='khaki') - style.configure('RecordInfo.TRadiobutton', background='khaki') - style.configure('EnvironmentInfo.TLabel', background='lightblue') - style.configure( - 'EnvironmentInfo.TCheckbutton', - background='lightblue' - ) - style.configure('PlantInfo.TLabel', background='lightgreen') - - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # new chapter 8 - # variable to track current record id - self.current_record = None - - # Label for displaying what record we're editing - self.record_label = ttk.Label(self) - self.record_label.grid(row=0, column=0) - - # Record info section - r_info = self._add_frame( - "Record Information", 'RecordInfo.TLabelframe' - ) - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - label_args={'style': 'RecordInfo.TLabel'}, - input_args={ - 'button_args':{'style': 'RecordInfo.TRadiobutton'} - } - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame( - "Environment Data", 'EnvironmentInfo.TLabelframe' - ) - - e_info = ttk.LabelFrame( - self, - text="Environment Data", - style='EnvironmentInfo.TLabelframe' - ) - e_info.grid(row=2, column=0, sticky="we") - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - disable_var=self._vars['Equipment Fault'], - var=self._vars['Temperature'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'}, - input_args={'style': 'EnvironmentInfo.TCheckbutton'} - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data", 'PlantInfo.TLabelframe') - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=2) - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={"max_var": max_height_var, - "focus_update_var": min_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={"min_var": min_height_var, - "focus_update_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={"min_var": min_height_var, - "max_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=2) - - - # Notes section -- Update grid row value for ch8 - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=4, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=5) - self.save_button_logo = tk.PhotoImage(file=images.SAVE_ICON) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save, - image=self.save_button_logo, compound=tk.LEFT - ) - self.savebutton.pack(side=tk.RIGHT) - - self.reset_button_logo = tk.PhotoImage(file=images.RESET_ICON) - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset, - image=self.reset_button_logo, compound=tk.LEFT - ) - self.resetbutton.pack(side=tk.RIGHT) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - # new for ch8 - def load_record(self, rownum, data=None): - self.current_record = rownum - if rownum is None: - self.reset() - self.record_label.config(text='New Record') - else: - self.record_label.config(text=f'Record #{rownum}') - for key, var in self._vars.items(): - var.set(data.get(key, '')) - try: - var.label_widget.input.trigger_focusout_validation() - except AttributeError: - pass - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) - - -class RecordList(tk.Frame): - """Display for CSV file contents""" - - column_defs = { - '#0': {'label': 'Row', 'anchor': tk.W}, - 'Date': {'label': 'Date', 'width': 150, 'stretch': True}, - 'Time': {'label': 'Time'}, - 'Lab': {'label': 'Lab', 'width': 40}, - 'Plot': {'label': 'Plot', 'width': 80} - } - default_width = 100 - default_minwidth = 10 - default_anchor = tk.CENTER - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self._inserted = list() - self._updated = list() - - self.columnconfigure(0, weight=1) - self.rowconfigure(0, weight=1) - - # create treeview - self.treeview = ttk.Treeview( - self, - columns=list(self.column_defs.keys())[1:], - selectmode='browse' - ) - self.treeview.grid(row=0, column=0, sticky='NSEW') - - # Configure treeview columns - for name, definition in self.column_defs.items(): - label = definition.get('label', '') - anchor = definition.get('anchor', self.default_anchor) - minwidth = definition.get('minwidth', self.default_minwidth) - width = definition.get('width', self.default_width) - stretch = definition.get('stretch', False) - self.treeview.heading(name, text=label, anchor=anchor) - self.treeview.column( - name, anchor=anchor, minwidth=minwidth, - width=width, stretch=stretch - ) - - self.treeview.bind('', self._on_open_record) - self.treeview.bind('', self._on_open_record) - - # configure scrollbar for the treeview - self.scrollbar = ttk.Scrollbar( - self, - orient=tk.VERTICAL, - command=self.treeview.yview - ) - self.treeview.configure(yscrollcommand=self.scrollbar.set) - self.scrollbar.grid(row=0, column=1, sticky='NSW') - - # configure tagging - self.treeview.tag_configure('inserted', background='lightgreen') - self.treeview.tag_configure('updated', background='lightblue') - - def populate(self, rows): - """Clear the treeview and write the supplied data rows to it.""" - for row in self.treeview.get_children(): - self.treeview.delete(row) - - cids = list(self.column_defs.keys())[1:] - for rownum, rowdata in enumerate(rows): - values = [rowdata[cid] for cid in cids] - if rownum in self._inserted: - tag = 'inserted' - elif rownum in self._updated: - tag = 'updated' - else: - tag = '' - self.treeview.insert( - '', 'end', iid=str(rownum), - text=str(rownum), values=values, tag=tag) - - if len(rows) > 0: - self.treeview.focus_set() - self.treeview.selection_set('0') - self.treeview.focus('0') - - def _on_open_record(self, *args): - self.event_generate('<>') - - @property - def selected_id(self): - selection = self.treeview.selection() - return int(selection[0]) if selection else None - - def add_updated_row(self, row): - if row not in self._updated: - self._updated.append(row) - - def add_inserted_row(self, row): - if row not in self._inserted: - self._inserted.append(row) - - def clear_tags(self): - self._inserted.clear() - self._updated.clear() diff --git a/Chapter09/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter09/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index ec72ed4..0000000 --- a/Chapter09/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,441 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - style = ttk.Style() - widget_class = self.winfo_class() - validated_style = 'ValidatedInput.' + widget_class - style.map( - validated_style, - foreground=[('invalid', 'white'), ('!invalid', 'black')], - fieldbackground=[('invalid', 'darkred'), ('!invalid', 'white')] - ) - self.configure(style=validated_style) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - pass - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.input.error = getattr(button, 'error', None) - self.input.trigger_focusout_validation = \ - button._focusout_validate - else: - self.input = input_class(self, **input_args) - - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - error_style = 'Error.' + label_args.get('style', 'TLabel') - ttk.Style().configure(error_style, foreground='darkred') - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error, style=error_style).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter09/ABQ_Data_Entry/docs/Application_layout.png b/Chapter09/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter09/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter09/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter09/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index fec5e84..0000000 --- a/Chapter09/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,97 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - - -Description ------------ -The program is being created to minimize data entry errors for laboratory measurements. - -Functionality Required ----------------------- - -The program must: - -* Provide a UI for reading, updating, and appending data to the CSV file -* allow all relevant, valid data to be entered, as per the field chart -* append entered data to a CSV file - - The CSV file must have a filename of abq_data_record_CURRENTDATE.csv, - where CURRENTDATE is the date of the checks in ISO format (Year-month-day) - - The CSV file must have all the fields as per the chart - -* enforce correct datatypes per field -* have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout -* prevent saving the record when errors are present - -The program should try, whenever possible, to: - -* enforce reasonable limits on data entered -* Auto-fill data -* Suggest likely correct values -* Provide a smooth and efficient workflow - -Functionality Not Required --------------------------- - -The program does not need to: - -* Allow deletion of data. - -Limitations ------------ - -The program must: - -* Be efficiently operable by keyboard-only users. -* Be accessible to color blind users. -* Run on Debian Linux. -* Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+----------+------+------------------+--------------------------+ -|Field | Datatype | Units| Range |Descripton | -+============+==========+======+==================+==========================+ -|Date |Date | | |Date of record | -+------------+----------+------+------------------+--------------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00 | | -+------------+----------+------+------------------+--------------------------+ -|Lab |String | | A - C |Lab ID | -+------------+----------+------+------------------+--------------------------+ -|Technician |String | | |Technician name | -+------------+----------+------+------------------+--------------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+----------+------+------------------+--------------------------+ -|Seed |String | | |Seed sample ID | -|sample | | | | | -+------------+----------+------+------------------+--------------------------+ -|Fault |Bool | | |Fault on environmental | -| | | | |sensor | -+------------+----------+------+------------------+--------------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -+------------+----------+------+------------------+--------------------------+ -|Humidity |Decimal |g/m³ | 0.5 - 52.0 |Abs humidity at plot | -+------------+----------+------+------------------+--------------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -+------------+----------+------+------------------+--------------------------+ -|Blossoms |Int | | 0 - 1000 |Number of blossoms in plot| -+------------+----------+------+------------------+--------------------------+ -|Fruit |Int | | 0 - 1000 |Number of fruits in plot | -+------------+----------+------+------------------+--------------------------+ -|Plants |Int | | 0 - 20 |Number of plants in plot | -+------------+----------+------+------------------+--------------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest plant in| -| | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest plant | -| | | | |in plot | -+------------+----------+------+------------------+--------------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of plants in| -|height | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+----------+------+------------------+--------------------------+ diff --git a/Chapter09/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter09/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter09/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter09/font_demo.py b/Chapter09/font_demo.py deleted file mode 100644 index 8feef83..0000000 --- a/Chapter09/font_demo.py +++ /dev/null @@ -1,33 +0,0 @@ -"""PGPT Chapter 9 Font Demo""" - -import tkinter as tk -from tkinter import font - -root = tk.Tk() - -# Fonts can be specified directly as a string -# in the format "family size [style] [style] ..." -# where "style" can be any of normal, bold, italic, underline, overstrike - -tk.Label(text="Direct font format", font="Times").pack() - -# Fonts can be specified as a tuple in the same order -tk.Label( - text="Tuple font format", - font=('Noto sans', 15, 'overstrike') -).pack() - -# Fonts can use named fonts created via the Font class -labelfont = font.Font( - family='Courier', size=30, - weight='bold', slant='roman', - underline=False, overstrike=False -) -tk.Label(text='Using the Font class', font=labelfont).pack() - -def toggle_overstrike(): - labelfont['overstrike'] = not labelfont['overstrike'] - -tk.Button(text='Toggle Overstrike', command=toggle_overstrike).pack() - -root.mainloop() diff --git a/Chapter09/image_scope_demo.py b/Chapter09/image_scope_demo.py deleted file mode 100644 index 9a28ec5..0000000 --- a/Chapter09/image_scope_demo.py +++ /dev/null @@ -1,12 +0,0 @@ -import tkinter as tk - -class App(tk.Tk): - def __init__(self): - super().__init__() - tk.Label(self, image=tk.PhotoImage(file='smile.gif')).pack() - smile = tk.PhotoImage(file='smile.gif') - tk.Label(self, image=smile).pack() - self.smile = tk.PhotoImage(file='smile.gif') - tk.Label(self, image=self.smile).pack() - -App().mainloop() diff --git a/Chapter09/image_viewer_demo.py b/Chapter09/image_viewer_demo.py deleted file mode 100644 index e0bc5b0..0000000 --- a/Chapter09/image_viewer_demo.py +++ /dev/null @@ -1,60 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter import filedialog -from PIL import Image, ImageTk, ImageFilter # this is pillow - -class PictureViewer(tk.Tk): - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.title('My Image Viewer') - self.geometry('800x600') - self.rowconfigure(0, weight=1) - self.columnconfigure(0, weight=1) - - # create the GUI - self.image_display = ttk.Label(self) - self.image_display.grid(columnspan=3) - - ttk.Button( - self, text='Select image', command=self._choose_file - ).grid(row=1, column=0, sticky='w') - - # Image filtering - self.filtervar = tk.StringVar() - filters =[ - 'None', 'BLUR', 'CONTOUR', 'DETAIL', 'EDGE_ENHANCE', - 'EDGE_ENHANCE_MORE', 'EMBOSS', 'FIND_EDGES', - 'SHARPEN', 'SMOOTH', 'SMOOTH_MORE' - ] - ttk.Label(self, text='Filter: ').grid(row=1, column=1, sticky='e') - ttk.OptionMenu( - self, self.filtervar, 'None', *filters - ).grid(row=1, column=2) - self.filtervar.trace_add('write', self._apply_filter) - - def _choose_file(self): - filename = filedialog.askopenfilename( - filetypes=( - ('JPEG files', '*.jpg *.jpeg *.JPG *.JPEG'), - ('PNG files', '*.png *.PNG'), - ('All files', '*.*') - )) - if filename: - self.image = Image.open(filename) - self.photoimage = ImageTk.PhotoImage(self.image) - self.image_display.config(image=self.photoimage) - - def _apply_filter(self, *_): - filter_name = self.filtervar.get() - if filter_name == 'None': - self.filtered_image = self.image - else: - filter_object = getattr(ImageFilter, filter_name) - self.filtered_image = self.image.filter(filter_object) - self.photoimage = ImageTk.PhotoImage(self.filtered_image) - self.image_display.config(image=self.photoimage) - - -app = PictureViewer() -app.mainloop() diff --git a/Chapter09/monalisa.jpg b/Chapter09/monalisa.jpg deleted file mode 100644 index dfce002..0000000 Binary files a/Chapter09/monalisa.jpg and /dev/null differ diff --git a/Chapter09/named_font_demo.py b/Chapter09/named_font_demo.py deleted file mode 100644 index 487217e..0000000 --- a/Chapter09/named_font_demo.py +++ /dev/null @@ -1,23 +0,0 @@ -import tkinter as tk -from tkinter import font -root = tk.Tk() - -for name in font.names(): - font_obj = font.nametofont(name) - tk.Label(root, text=name, font=font_obj).pack() - -namedfont = tk.StringVar() -family = tk.StringVar() -size = tk.IntVar() - -tk.OptionMenu(root, namedfont, *font.names()).pack() -tk.OptionMenu(root, family, *font.families()).pack() -tk.Spinbox(root, textvariable=size, from_=6, to=128).pack() - -def setFont(): - font_obj = font.nametofont(namedfont.get()) - font_obj.configure(family=family.get(), size=size.get()) - -tk.Button(root, text='Change', command=setFont).pack() - -root.mainloop() diff --git a/Chapter09/smile.gif b/Chapter09/smile.gif deleted file mode 100644 index 34b3a09..0000000 Binary files a/Chapter09/smile.gif and /dev/null differ diff --git a/Chapter09/tags_demo.py b/Chapter09/tags_demo.py deleted file mode 100644 index 530b8ce..0000000 --- a/Chapter09/tags_demo.py +++ /dev/null @@ -1,24 +0,0 @@ -"""A simple Python shell used to demonstrate tags""" - -import tkinter as tk - -text = tk.Text(width=50, height=20, bg='black', fg='lightgreen') -text.pack() -text.tag_configure('prompt', foreground='magenta') -text.tag_configure('output', foreground='yellow') -text.insert('end', '>>> ', ('prompt',)) - -def on_return(*args): - cmd = text.get('prompt.last', 'end').strip() - if cmd: - try: - output = str(eval(cmd)) - except Exception as e: - output = str(e) - text.insert('end', '\n' + output, ('output',)) - text.insert('end', '\n>>> ', ('prompt',)) - return 'break' - - -text.bind('', on_return) -text.mainloop() diff --git a/Chapter09/tk_default_font_example.py b/Chapter09/tk_default_font_example.py deleted file mode 100644 index 9b7f929..0000000 --- a/Chapter09/tk_default_font_example.py +++ /dev/null @@ -1,13 +0,0 @@ -import tkinter as tk -from tkinter.font import nametofont - -root = tk.Tk() - -# Get and adjust default font -default_font = nametofont('TkDefaultFont') -default_font.config(family='Helvetica', size=32) - -# Display a label -tk.Label(text='Feeling Groovy').pack() - -root.mainloop() diff --git a/Chapter09/tkinter_color_demo.py b/Chapter09/tkinter_color_demo.py deleted file mode 100644 index 0549a9b..0000000 --- a/Chapter09/tkinter_color_demo.py +++ /dev/null @@ -1,7 +0,0 @@ -import tkinter as tk - -l = tk.Label(text='Hot Dog!', fg='yellow', bg='red') -l.pack(expand=1, fill='both') - -l2 = tk.Label(text='Also Hot Dog!', foreground='#FFFF00', background='#FF0000') -l2.pack(expand=1, fill='both') diff --git a/Chapter09/ttk_combobox_info.py b/Chapter09/ttk_combobox_info.py deleted file mode 100644 index 5f7a8fd..0000000 --- a/Chapter09/ttk_combobox_info.py +++ /dev/null @@ -1,54 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from pprint import pprint - -root = tk.Tk() -style = ttk.Style() - -print('TTK Combobox\n') - -cb = ttk.Combobox(root) -cb_stylename = cb.winfo_class() -print("Style name: ", cb_stylename) -print("Starting state:", cb.state()) -cb.state(['active', 'invalid']) -print("New state:", cb.state()) -cb.state(['!invalid']) -print("Newer state: ", cb.state()) - -cb_layout = style.layout(cb_stylename) -print("\nLayout: ") -pprint(cb_layout) - -def walk_layout(layout): - for element, subelements in layout: - print("\nOptions for {}:".format(element)) - pprint(style.element_options(element)) - if subelements.get("children"): - walk_layout(subelements.get("children")) -walk_layout(cb_layout) - -cb_map = style.map(cb_stylename) -print("\nDefault Map:") -pprint(cb_map) - -style.map(cb_stylename, - fieldbackground=[ - ('!invalid', 'blue'), - ('invalid', 'red') - ], - font=[ - ('!invalid', 'Helvetica 20 normal'), - ('invalid', 'Helvetica 20 bold') - ]) - -cb_map = style.map(cb_stylename) -print("\nNew Map:") -pprint(cb_map) - -print('\nAvailable Themes:') -pprint(style.theme_names()) - -print('\nCurrent Theme:', style.theme_use()) - -pprint(style.element_names()) diff --git a/Chapter10/ABQ_Data_Entry/.gitignore b/Chapter10/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter10/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter10/ABQ_Data_Entry/README.rst b/Chapter10/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter10/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry.py b/Chapter10/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter10/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter10/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index 52da855..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,264 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog -from tkinter import font -import platform - -from . import views as v -from . import models as m -from .mainmenu import get_main_menu_for_os -from . import images - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - self.deiconify() - - # Create model - self.model = m.CSVModel() - - # Load settings - # self.settings = { - # 'autofill date': tk.BooleanVar(), - # 'autofill sheet data': tk.BoleanVar() - # } - self.settings_model = m.SettingsModel() - self._load_settings() - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Set taskbar icon - self.taskbar_icon = tk.PhotoImage(file=images.ABQ_LOGO_64) - self.iconphoto(True, self.taskbar_icon) - - # Create the menu - #menu = MainMenu(self, self.settings) - menu_class = get_main_menu_for_os(platform.system()) - menu = menu_class(self, self.settings) - - self.config(menu=menu) - event_callbacks = { - '<>': self._on_file_select, - '<>': lambda _: self.quit(), - '<>': self._show_recordlist, - '<>': self._new_record, - - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - # new for ch9 - self.logo = tk.PhotoImage(file=images.ABQ_LOGO_32) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16), - image=self.logo, - compound=tk.LEFT - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform_icon = tk.PhotoImage(file=images.FORM_ICON) - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.notebook.add( - self.recordform, text='Entry Form', - image=self.recordform_icon, compound=tk.LEFT - ) - self.recordform.bind('<>', self._on_save) - - - # The data record list - self.recordlist_icon = tk.PhotoImage(file=images.LIST_ICON) - self.recordlist = v.RecordList(self) - self.notebook.insert( - 0, self.recordlist, text='Records', - image=self.recordlist_icon, compound=tk.LEFT - ) - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rownum = self.recordform.current_record - self.model.save_record(data, rownum) - if rownum is not None: - self.recordlist.add_updated_row(rownum) - else: - rownum = len(self.model.get_all_records()) -1 - self.recordlist.add_inserted_row(rownum) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - - def _on_file_select(self, *_): - """Handle the file->select action""" - - filename = filedialog.asksaveasfilename( - title='Select the target file for saving records', - defaultextension='.csv', - filetypes=[('CSV', '*.csv *.CSV')] - ) - if filename: - self.model = m.CSVModel(filename=filename) - self.recordlist.clear_tags() - self._populate_recordlist() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._simple_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - # update font settings after loading them - self._set_font() - self.settings['font size'].trace_add('write', self._set_font) - self.settings['font family'].trace_add('write', self._set_font) - - # process theme - style = ttk.Style() - theme = self.settings.get('theme').get() - if theme in style.theme_names(): - style.theme_use(theme) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None, None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the Record selected recordlist id in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - return - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) - - # new chapter 9 - def _set_font(self, *_): - """Set the application's font""" - font_size = self.settings['font size'].get() - font_family = self.settings['font family'].get() - font_names = ('TkDefaultFont', 'TkMenuFont', 'TkTextFont') - for font_name in font_names: - tk_font = font.nametofont(font_name) - tk_font.config(size=font_size, family=font_family) diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter10/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/__init__.py b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/__init__.py deleted file mode 100644 index 57538d9..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from pathlib import Path - -# This gives us the parent directory of this file (__init__.py) -IMAGE_DIRECTORY = Path(__file__).parent - -ABQ_LOGO_16 = IMAGE_DIRECTORY / 'abq_logo-16x10.png' -ABQ_LOGO_32 = IMAGE_DIRECTORY / 'abq_logo-32x20.png' -ABQ_LOGO_64 = IMAGE_DIRECTORY / 'abq_logo-64x40.png' - -# PNG icons - -SAVE_ICON = IMAGE_DIRECTORY / 'file-2x.png' -RESET_ICON = IMAGE_DIRECTORY / 'reload-2x.png' -LIST_ICON = IMAGE_DIRECTORY / 'list-2x.png' -FORM_ICON = IMAGE_DIRECTORY / 'browser-2x.png' - - -# BMP icons -QUIT_BMP = IMAGE_DIRECTORY / 'x-2x.xbm' -ABOUT_BMP = IMAGE_DIRECTORY / 'question-mark-2x.xbm' diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png deleted file mode 100644 index 255f273..0000000 Binary files a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png and /dev/null differ diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png deleted file mode 100644 index 650add1..0000000 Binary files a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png and /dev/null differ diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png deleted file mode 100644 index be9458f..0000000 Binary files a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png and /dev/null differ diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png deleted file mode 100644 index 2a6efb0..0000000 Binary files a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png and /dev/null differ diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/file-2x.png b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/file-2x.png deleted file mode 100644 index 4196c44..0000000 Binary files a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/file-2x.png and /dev/null differ diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/list-2x.png b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/list-2x.png deleted file mode 100644 index 1fc4450..0000000 Binary files a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/list-2x.png and /dev/null differ diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm deleted file mode 100644 index 8981c9b..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define question_mark_2x_width 16 -#define question_mark_2x_height 16 -static unsigned char question_mark_2x_bits[] = { - 0xc0, 0x0f, 0xe0, 0x1f, 0x70, 0x38, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x18, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03 }; diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png deleted file mode 100644 index 2a79f16..0000000 Binary files a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png and /dev/null differ diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm b/Chapter10/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm deleted file mode 100644 index 940af96..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define x_2x_width 16 -#define x_2x_height 16 -static unsigned char x_2x_bits[] = { - 0x04, 0x10, 0x0e, 0x38, 0x1f, 0x7c, 0x3e, 0x7e, 0x7c, 0x3f, 0xf8, 0x1f, - 0xf0, 0x0f, 0xe0, 0x07, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0x7e, 0x3e, - 0x3f, 0x7c, 0x1e, 0x78, 0x0c, 0x30, 0x00, 0x00 }; diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter10/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index 4d3d72a..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,362 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import font - -from . import images - -class GenericMainMenu(tk.Menu): - """The Application's main menu""" - - accelerators = { - 'file_open': 'Ctrl+O', - 'quit': 'Ctrl+Q', - 'record_list': 'Ctrl+L', - 'new_record': 'Ctrl+R', - } - - keybinds = { - '': '<>', - '': '<>', - '': '<>', - '': '<>' - } - - styles = {} - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def _create_icons(self): - - # must be done in a method because PhotoImage can't be created - # until there is a Tk instance. - # There isn't one when the class is defined, but there is when - # the instance is created. - self.icons = { - 'file_open': tk.PhotoImage(file=images.SAVE_ICON), - 'record_list': tk.PhotoImage(file=images.LIST_ICON), - 'new_record': tk.PhotoImage(file=images.FORM_ICON), - 'quit': tk.BitmapImage(file=images.QUIT_BMP, foreground='red'), - 'about': tk.BitmapImage( - file=images.ABOUT_BMP, foreground='#CC0', background='#A09' - ), - } - - def _add_file_open(self, menu): - - menu.add_command( - label='Select file…', command=self._event('<>'), - image=self.icons.get('file'), compound=tk.LEFT - ) - - def _add_quit(self, menu): - menu.add_command( - label='Quit', command=self._event('<>'), - image=self.icons.get('quit'), compound=tk.LEFT - ) - - def _add_autofill_date(self, menu): - menu.add_checkbutton( - label='Autofill Date', variable=self.settings['autofill date'] - ) - - def _add_autofill_sheet(self, menu): - menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - def _add_font_size_menu(self, menu): - font_size_menu = tk.Menu(self, tearoff=False, **self.styles) - for size in range(6, 17, 1): - font_size_menu.add_radiobutton( - label=size, value=size, - variable=self.settings['font size'] - ) - menu.add_cascade(label='Font size', menu=font_size_menu) - - def _add_font_family_menu(self, menu): - font_family_menu = tk.Menu(self, tearoff=False, **self.styles) - for family in font.families(): - font_family_menu.add_radiobutton( - label=family, value=family, - variable=self.settings['font family'] - ) - menu.add_cascade(label='Font family', menu=font_family_menu) - - def _add_themes_menu(self, menu): - style = ttk.Style() - themes_menu = tk.Menu(self, tearoff=False, **self.styles) - for theme in style.theme_names(): - themes_menu.add_radiobutton( - label=theme, value=theme, - variable=self.settings['theme'] - ) - menu.add_cascade(label='Theme', menu=themes_menu) - self.settings['theme'].trace_add('write', self._on_theme_change) - - def _add_go_record_list(self, menu): - menu.add_command( - label="Record List", command=self._event('<>'), - image=self.icons.get('record_list'), compound=tk.LEFT - ) - - def _add_go_new_record(self, menu): - menu.add_command( - label="New Record", command=self._event('<>'), - image=self.icons.get('new_record'), compound=tk.LEFT - ) - - def _add_about(self, menu): - menu.add_command( - label='About…', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - # The file menu - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The options menu - self._menus['Options'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Options']) - self._add_autofill_sheet(self._menus['Options']) - self._add_font_size_menu(self._menus['Options']) - self._add_font_family_menu(self._menus['Options']) - self._add_themes_menu(self._menus['Options']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self.add_cascade(label='Help', menu=self._menus['Help']) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - self.configure(**self.styles) - - def __init__(self, parent, settings, **kwargs): - super().__init__(parent, **kwargs) - self.settings = settings - self._create_icons() - self._menus = dict() - self._build_menu() - self._bind_accelerators() - self.configure(**self.styles) - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo( - title='About', message=about_message, detail=about_detail - ) - @staticmethod - def _on_theme_change(*_): - """Popup a message about theme changes""" - message = "Change requires restart" - detail = ( - "Theme changes do not take effect" - " until application restart" - ) - messagebox.showwarning( - title='Warning', - message=message, - detail=detail - ) - - def _bind_accelerators(self): - - for key, sequence in self.keybinds.items(): - self.bind_all(key, self._event(sequence)) - -class WindowsMainMenu(GenericMainMenu): - """ - Changes: - - Windows uses file->exit instead of file->quit, - and no accelerator is used. - - Windows can handle commands on the menubar, so - put 'Record List' / 'New Record' on the bar - - Windows can't handle icons on the menu bar, though - - Put 'options' under 'Tools' with separator - """ - - def _create_icons(self): - super()._create_icons() - del(self.icons['new_record']) - del(self.icons['record_list']) - - def __init__(self, *args, **kwargs): - del(self.keybinds['']) - super().__init__(*args, **kwargs) - - def _add_quit(self, menu): - menu.add_command( - label='Exit', - command=self._event('<>'), - image=self.icons.get('quit'), - compound=tk.LEFT - ) - - def _build_menu(self): - # File Menu - self._menus['File'] = tk.Menu(self, tearoff=False) - self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Tools']) - self._add_autofill_sheet(self._menus['Tools']) - self._add_font_size_menu(self._menus['Tools']) - self._add_font_family_menu(self._menus['Tools']) - self._add_themes_menu(self._menus['Tools']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False) - self._add_about(self._menus['Help']) - - # Build main menu - self.add_cascade(label='File', menu=self._menus['File']) - self.add_cascade(label='Tools', menu=self._menus['Tools']) - self._add_go_record_list(self) - self._add_go_new_record(self) - self.add_cascade(label='Help', menu=self._menus['Help']) - - -class LinuxMainMenu(GenericMainMenu): - """Differences for Linux: - - - Edit menu for autofill options - - View menu for font & theme options - - Use color theme for menu - """ - styles = { - 'background': '#333', - 'foreground': 'white', - 'activebackground': '#777', - 'activeforeground': 'white', - 'relief': tk.GROOVE - } - - - def _build_menu(self): - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The edit menu - self._menus['Edit'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - # The View menu - self._menus['View'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -class MacOsMainMenu(GenericMainMenu): - """ - Differences for MacOS: - - - Create App Menu - - Move about to app menu, remove 'help' - - Remove redundant quit command - - Change accelerators to Command-[] - - Add View menu for font & theme options - - Add Edit menu for autofill options - - Add Window menu for navigation commands - """ - keybinds = { - '': '<>', - '': '<>', - '': '<>' - } - accelerators = { - 'file_open': 'Cmd-O', - 'record_list': 'Cmd-L', - 'new_record': 'Cmd-R', - } - - def _add_about(self, menu): - menu.add_command( - label='About ABQ Data Entry', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - self._menus['ABQ Data Entry'] = tk.Menu( - self, tearoff=False, - name='apple' - ) - self._add_about(self._menus['ABQ Data Entry']) - self._menus['ABQ Data Entry'].add_separator() - - self._menus['File'] = tk.Menu(self, tearoff=False) - self._add_file_open(self._menus['File']) - - self._menus['Edit'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - # View menu - self._menus['View'] = tk.Menu(self, tearoff=False) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # Window Menu - self._menus['Window'] = tk.Menu(self, name='window', tearoff=False) - self._add_go_record_list(self._menus['Window']) - self._add_go_new_record(self._menus['Window']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -def get_main_menu_for_os(os_name): - """Return the menu class appropriate to the given OS""" - menus = { - 'Linux': LinuxMainMenu, - 'Darwin': MacOsMainMenu, - 'freebsd7': LinuxMainMenu, - 'Windows': WindowsMainMenu - } - - return menus.get(os_name, GenericMainMenu) diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter10/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index 6197f98..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,179 +0,0 @@ -import csv -from pathlib import Path -import os -import json -import platform - -from .constants import FieldTypes as FT -from decimal import Decimal -from datetime import datetime - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data, rownum=None): - """Save a dict of data to the CSV file""" - - if rownum is None: - # This is a new record - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - else: - # This is an update - records = self.get_all_records() - records[rownum] = data - with open(self.file, 'w', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - csvwriter.writeheader() - csvwriter.writerows(records) - - def get_all_records(self): - """Read in all records from the CSV and return a list""" - if not self.file.exists(): - return [] - - with open(self.file, 'r', encoding='utf-8') as fh: - csvreader = csv.DictReader(fh.readlines()) - missing_fields = set(self.fields.keys()) - set(csvreader.fieldnames) - if len(missing_fields) > 0: - fields_string = ', '.join(missing_fields) - raise Exception( - f"File is missing fields: {fields_string}" - ) - records = list(csvreader) - - # Correct issue with boolean fields - trues = ('true', 'yes', '1') - bool_fields = [ - key for key, meta - in self.fields.items() - if meta['type'] == FT.boolean - ] - for record in records: - for key in bool_fields: - record[key] = record[key].lower() in trues - return records - - def get_record(self, rownum): - """Get a single record by row number - - Callling code should catch IndexError - in case of a bad rownum. - """ - - return self.get_all_records()[rownum] - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'} - } - - config_dirs = { - "Linux": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - "freebsd7": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - 'Darwin': Path.home() / 'Library' / 'Application Support', - 'Windows': Path.home() / 'AppData' / 'Local' - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - filedir = self.config_dirs.get(platform.system(), Path.home()) - self.filepath = filedir / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - json_string = json.dumps(self.fields) - with open(self.filepath, 'w', encoding='utf-8') as fh: - fh.write(json_string) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.loads(fh.read()) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter10/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index a188493..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,510 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT -from . import images - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, style='', cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - if style: - frame.configure(style=style) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # new for ch9 - style = ttk.Style() - - # Frame styles - style.configure( - 'RecordInfo.TLabelframe', - background='khaki', padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe', background='lightblue', - padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe', - background='lightgreen', padx=10, pady=10 - ) - # Style the label Element as well - style.configure( - 'RecordInfo.TLabelframe.Label', background='khaki', - padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe.Label', - background='lightblue', padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe.Label', - background='lightgreen', padx=10, pady=10 - ) - - # Style for the form labels and buttons - style.configure('RecordInfo.TLabel', background='khaki') - style.configure('RecordInfo.TRadiobutton', background='khaki') - style.configure('EnvironmentInfo.TLabel', background='lightblue') - style.configure( - 'EnvironmentInfo.TCheckbutton', - background='lightblue' - ) - style.configure('PlantInfo.TLabel', background='lightgreen') - - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # new chapter 8 - # variable to track current record id - self.current_record = None - - # Label for displaying what record we're editing - self.record_label = ttk.Label(self) - self.record_label.grid(row=0, column=0) - - # Record info section - r_info = self._add_frame( - "Record Information", 'RecordInfo.TLabelframe' - ) - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - label_args={'style': 'RecordInfo.TLabel'}, - input_args={ - 'button_args':{'style': 'RecordInfo.TRadiobutton'} - } - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame( - "Environment Data", 'EnvironmentInfo.TLabelframe' - ) - - e_info = ttk.LabelFrame( - self, - text="Environment Data", - style='EnvironmentInfo.TLabelframe' - ) - e_info.grid(row=2, column=0, sticky="we") - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - disable_var=self._vars['Equipment Fault'], - var=self._vars['Temperature'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'}, - input_args={'style': 'EnvironmentInfo.TCheckbutton'} - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data", 'PlantInfo.TLabelframe') - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=2) - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={"max_var": max_height_var, - "focus_update_var": min_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={"min_var": min_height_var, - "focus_update_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={"min_var": min_height_var, - "max_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=2) - - - # Notes section -- Update grid row value for ch8 - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=4, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=5) - self.save_button_logo = tk.PhotoImage(file=images.SAVE_ICON) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save, - image=self.save_button_logo, compound=tk.LEFT - ) - self.savebutton.pack(side=tk.RIGHT) - - self.reset_button_logo = tk.PhotoImage(file=images.RESET_ICON) - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset, - image=self.reset_button_logo, compound=tk.LEFT - ) - self.resetbutton.pack(side=tk.RIGHT) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - # new for ch8 - def load_record(self, rownum, data=None): - self.current_record = rownum - if rownum is None: - self.reset() - self.record_label.config(text='New Record') - else: - self.record_label.config(text=f'Record #{rownum}') - for key, var in self._vars.items(): - var.set(data.get(key, '')) - try: - var.label_widget.input.trigger_focusout_validation() - except AttributeError: - pass - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) - - -class RecordList(tk.Frame): - """Display for CSV file contents""" - - column_defs = { - '#0': {'label': 'Row', 'anchor': tk.W}, - 'Date': {'label': 'Date', 'width': 150, 'stretch': True}, - 'Time': {'label': 'Time'}, - 'Lab': {'label': 'Lab', 'width': 40}, - 'Plot': {'label': 'Plot', 'width': 80} - } - default_width = 100 - default_minwidth = 10 - default_anchor = tk.CENTER - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self._inserted = list() - self._updated = list() - - self.columnconfigure(0, weight=1) - self.rowconfigure(0, weight=1) - - # create treeview - self.treeview = ttk.Treeview( - self, - columns=list(self.column_defs.keys())[1:], - selectmode='browse' - ) - self.treeview.grid(row=0, column=0, sticky='NSEW') - - # Configure treeview columns - for name, definition in self.column_defs.items(): - label = definition.get('label', '') - anchor = definition.get('anchor', self.default_anchor) - minwidth = definition.get('minwidth', self.default_minwidth) - width = definition.get('width', self.default_width) - stretch = definition.get('stretch', False) - self.treeview.heading(name, text=label, anchor=anchor) - self.treeview.column( - name, anchor=anchor, minwidth=minwidth, - width=width, stretch=stretch - ) - - self.treeview.bind('', self._on_open_record) - self.treeview.bind('', self._on_open_record) - - # configure scrollbar for the treeview - self.scrollbar = ttk.Scrollbar( - self, - orient=tk.VERTICAL, - command=self.treeview.yview - ) - self.treeview.configure(yscrollcommand=self.scrollbar.set) - self.scrollbar.grid(row=0, column=1, sticky='NSW') - - # configure tagging - self.treeview.tag_configure('inserted', background='lightgreen') - self.treeview.tag_configure('updated', background='lightblue') - - def populate(self, rows): - """Clear the treeview and write the supplied data rows to it.""" - for row in self.treeview.get_children(): - self.treeview.delete(row) - - cids = list(self.column_defs.keys())[1:] - for rownum, rowdata in enumerate(rows): - values = [rowdata[cid] for cid in cids] - if rownum in self._inserted: - tag = 'inserted' - elif rownum in self._updated: - tag = 'updated' - else: - tag = '' - self.treeview.insert( - '', 'end', iid=str(rownum), - text=str(rownum), values=values, tag=tag) - - if len(rows) > 0: - self.treeview.focus_set() - self.treeview.selection_set('0') - self.treeview.focus('0') - - def _on_open_record(self, *args): - self.event_generate('<>') - - @property - def selected_id(self): - selection = self.treeview.selection() - return int(selection[0]) if selection else None - - def add_updated_row(self, row): - if row not in self._updated: - self._updated.append(row) - - def add_inserted_row(self, row): - if row not in self._inserted: - self._inserted.append(row) - - def clear_tags(self): - self._inserted.clear() - self._updated.clear() diff --git a/Chapter10/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter10/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index ec72ed4..0000000 --- a/Chapter10/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,441 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - style = ttk.Style() - widget_class = self.winfo_class() - validated_style = 'ValidatedInput.' + widget_class - style.map( - validated_style, - foreground=[('invalid', 'white'), ('!invalid', 'black')], - fieldbackground=[('invalid', 'darkred'), ('!invalid', 'white')] - ) - self.configure(style=validated_style) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - pass - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.input.error = getattr(button, 'error', None) - self.input.trigger_focusout_validation = \ - button._focusout_validate - else: - self.input = input_class(self, **input_args) - - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - error_style = 'Error.' + label_args.get('style', 'TLabel') - ttk.Style().configure(error_style, foreground='darkred') - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error, style=error_style).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter10/ABQ_Data_Entry/docs/Application_layout.png b/Chapter10/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter10/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter10/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter10/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index fec5e84..0000000 --- a/Chapter10/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,97 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - - -Description ------------ -The program is being created to minimize data entry errors for laboratory measurements. - -Functionality Required ----------------------- - -The program must: - -* Provide a UI for reading, updating, and appending data to the CSV file -* allow all relevant, valid data to be entered, as per the field chart -* append entered data to a CSV file - - The CSV file must have a filename of abq_data_record_CURRENTDATE.csv, - where CURRENTDATE is the date of the checks in ISO format (Year-month-day) - - The CSV file must have all the fields as per the chart - -* enforce correct datatypes per field -* have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout -* prevent saving the record when errors are present - -The program should try, whenever possible, to: - -* enforce reasonable limits on data entered -* Auto-fill data -* Suggest likely correct values -* Provide a smooth and efficient workflow - -Functionality Not Required --------------------------- - -The program does not need to: - -* Allow deletion of data. - -Limitations ------------ - -The program must: - -* Be efficiently operable by keyboard-only users. -* Be accessible to color blind users. -* Run on Debian Linux. -* Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+----------+------+------------------+--------------------------+ -|Field | Datatype | Units| Range |Descripton | -+============+==========+======+==================+==========================+ -|Date |Date | | |Date of record | -+------------+----------+------+------------------+--------------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00 | | -+------------+----------+------+------------------+--------------------------+ -|Lab |String | | A - C |Lab ID | -+------------+----------+------+------------------+--------------------------+ -|Technician |String | | |Technician name | -+------------+----------+------+------------------+--------------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+----------+------+------------------+--------------------------+ -|Seed |String | | |Seed sample ID | -|sample | | | | | -+------------+----------+------+------------------+--------------------------+ -|Fault |Bool | | |Fault on environmental | -| | | | |sensor | -+------------+----------+------+------------------+--------------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -+------------+----------+------+------------------+--------------------------+ -|Humidity |Decimal |g/m³ | 0.5 - 52.0 |Abs humidity at plot | -+------------+----------+------+------------------+--------------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -+------------+----------+------+------------------+--------------------------+ -|Blossoms |Int | | 0 - 1000 |Number of blossoms in plot| -+------------+----------+------+------------------+--------------------------+ -|Fruit |Int | | 0 - 1000 |Number of fruits in plot | -+------------+----------+------+------------------+--------------------------+ -|Plants |Int | | 0 - 20 |Number of plants in plot | -+------------+----------+------+------------------+--------------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest plant in| -| | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest plant | -| | | | |in plot | -+------------+----------+------+------------------+--------------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of plants in| -|height | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+----------+------+------------------+--------------------------+ diff --git a/Chapter10/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter10/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter10/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter10/complex_cross_platform_demo/backend.py b/Chapter10/complex_cross_platform_demo/backend.py deleted file mode 100644 index 1c2371d..0000000 --- a/Chapter10/complex_cross_platform_demo/backend.py +++ /dev/null @@ -1,37 +0,0 @@ -import subprocess - - -def get_process_getter_class(os_name): - backends = { - 'Linux': LinuxProcessGetter, - 'Darwin': MacBsdProcessGetter, - 'Windows': WindowsProcessGetter, - 'freebsd7': MacBsdProcessGetter - } - try: - return backends[os_name] - except KeyError: - raise NotImplementedError("No backend for OS") - - -class GenericProcessGetter: - - cmd = [] - - def get_process_list(self): - if self.cmd: - return subprocess.check_output(self.cmd) - else: - raise NotImplementedError - - -class LinuxProcessGetter(GenericProcessGetter): - cmd = ['ps', '-e', '--format', 'comm', '--no-heading'] - - -class MacBsdProcessGetter(GenericProcessGetter): - cmd = ['ps', '-e', '-o', "comm=''", '-c'] - - -class WindowsProcessGetter(GenericProcessGetter): - cmd = ['tasklist', '/nh', '/fo', 'CSV'] diff --git a/Chapter10/complex_cross_platform_demo/main.py b/Chapter10/complex_cross_platform_demo/main.py deleted file mode 100644 index 4025b88..0000000 --- a/Chapter10/complex_cross_platform_demo/main.py +++ /dev/null @@ -1,7 +0,0 @@ -import platform -from backend import get_process_getter_class - -os_name = platform.system() -os_backend = get_process_getter_class(os_name)() - -print(os_backend.get_process_list()) diff --git a/Chapter10/non_cross_platform_menu.py b/Chapter10/non_cross_platform_menu.py deleted file mode 100644 index f8c4164..0000000 --- a/Chapter10/non_cross_platform_menu.py +++ /dev/null @@ -1,42 +0,0 @@ -import tkinter as tk -from tkinter.messagebox import showinfo - -root = tk.Tk() -root.geometry("300x200") -menu = tk.Menu(root) - - -smile = tk.PhotoImage(file='smile.gif') -smile_menu = tk.Menu(menu, tearoff=False) -smile_menu.add_command( - image=smile, - command=lambda: showinfo(message="Smile!") -) -smile_menu.add_command(label='test') - -# The image is cut off in MacOS -# In Windows, only the text "(image)" appears -menu.add_cascade(image=smile, menu=smile_menu) - - -# configure colors -menu.configure(foreground='white', background='navy') -smile_menu.configure(foreground='yellow', background='red') - -# Doesn't appear on any platform -menu.add_separator() - -# Doesn't appear on MacOS at all -menu.add_command( - label='Top level command', - command=lambda: showinfo(message='By your command!') -) - - -boolvar = tk.BooleanVar() -# Doesn't appear on MacOS at all -# Appears in Windows, but without checkbox -menu.add_checkbutton(label="It is true", variable=boolvar) - -root.config(menu=menu) -root.mainloop() diff --git a/Chapter10/simple_cross_platform_demo.py b/Chapter10/simple_cross_platform_demo.py deleted file mode 100644 index 92dbd33..0000000 --- a/Chapter10/simple_cross_platform_demo.py +++ /dev/null @@ -1,18 +0,0 @@ -import platform -import subprocess - -os_name = platform.system() -if os_name in ('Darwin', 'freebsd7'): - cmd = ['ps', '-e', '-o', "comm=''", '-c'] -elif os_name == 'Linux': - cmd = [ - 'ps', '-e', '--format', - 'comm', '--no-heading' - ] -elif os_name == 'Windows': - cmd = ['tasklist', '/nh', '/fo', 'CSV'] -else: - raise NotImplemented("Command unknown for OS") - -processes = subprocess.check_output(cmd) -print(processes) diff --git a/Chapter10/smile.gif b/Chapter10/smile.gif deleted file mode 100644 index 34b3a09..0000000 Binary files a/Chapter10/smile.gif and /dev/null differ diff --git a/Chapter11/ABQ_Data_Entry/.gitignore b/Chapter11/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter11/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter11/ABQ_Data_Entry/README.rst b/Chapter11/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter11/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry.py b/Chapter11/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index 52da855..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,264 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog -from tkinter import font -import platform - -from . import views as v -from . import models as m -from .mainmenu import get_main_menu_for_os -from . import images - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - self.deiconify() - - # Create model - self.model = m.CSVModel() - - # Load settings - # self.settings = { - # 'autofill date': tk.BooleanVar(), - # 'autofill sheet data': tk.BoleanVar() - # } - self.settings_model = m.SettingsModel() - self._load_settings() - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Set taskbar icon - self.taskbar_icon = tk.PhotoImage(file=images.ABQ_LOGO_64) - self.iconphoto(True, self.taskbar_icon) - - # Create the menu - #menu = MainMenu(self, self.settings) - menu_class = get_main_menu_for_os(platform.system()) - menu = menu_class(self, self.settings) - - self.config(menu=menu) - event_callbacks = { - '<>': self._on_file_select, - '<>': lambda _: self.quit(), - '<>': self._show_recordlist, - '<>': self._new_record, - - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - # new for ch9 - self.logo = tk.PhotoImage(file=images.ABQ_LOGO_32) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16), - image=self.logo, - compound=tk.LEFT - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform_icon = tk.PhotoImage(file=images.FORM_ICON) - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.notebook.add( - self.recordform, text='Entry Form', - image=self.recordform_icon, compound=tk.LEFT - ) - self.recordform.bind('<>', self._on_save) - - - # The data record list - self.recordlist_icon = tk.PhotoImage(file=images.LIST_ICON) - self.recordlist = v.RecordList(self) - self.notebook.insert( - 0, self.recordlist, text='Records', - image=self.recordlist_icon, compound=tk.LEFT - ) - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rownum = self.recordform.current_record - self.model.save_record(data, rownum) - if rownum is not None: - self.recordlist.add_updated_row(rownum) - else: - rownum = len(self.model.get_all_records()) -1 - self.recordlist.add_inserted_row(rownum) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - - def _on_file_select(self, *_): - """Handle the file->select action""" - - filename = filedialog.asksaveasfilename( - title='Select the target file for saving records', - defaultextension='.csv', - filetypes=[('CSV', '*.csv *.CSV')] - ) - if filename: - self.model = m.CSVModel(filename=filename) - self.recordlist.clear_tags() - self._populate_recordlist() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._simple_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - # update font settings after loading them - self._set_font() - self.settings['font size'].trace_add('write', self._set_font) - self.settings['font family'].trace_add('write', self._set_font) - - # process theme - style = ttk.Style() - theme = self.settings.get('theme').get() - if theme in style.theme_names(): - style.theme_use(theme) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None, None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the Record selected recordlist id in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - return - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) - - # new chapter 9 - def _set_font(self, *_): - """Set the application's font""" - font_size = self.settings['font size'].get() - font_family = self.settings['font family'].get() - font_names = ('TkDefaultFont', 'TkMenuFont', 'TkTextFont') - for font_name in font_names: - tk_font = font.nametofont(font_name) - tk_font.config(size=font_size, family=font_family) diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/__init__.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/__init__.py deleted file mode 100644 index 57538d9..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from pathlib import Path - -# This gives us the parent directory of this file (__init__.py) -IMAGE_DIRECTORY = Path(__file__).parent - -ABQ_LOGO_16 = IMAGE_DIRECTORY / 'abq_logo-16x10.png' -ABQ_LOGO_32 = IMAGE_DIRECTORY / 'abq_logo-32x20.png' -ABQ_LOGO_64 = IMAGE_DIRECTORY / 'abq_logo-64x40.png' - -# PNG icons - -SAVE_ICON = IMAGE_DIRECTORY / 'file-2x.png' -RESET_ICON = IMAGE_DIRECTORY / 'reload-2x.png' -LIST_ICON = IMAGE_DIRECTORY / 'list-2x.png' -FORM_ICON = IMAGE_DIRECTORY / 'browser-2x.png' - - -# BMP icons -QUIT_BMP = IMAGE_DIRECTORY / 'x-2x.xbm' -ABOUT_BMP = IMAGE_DIRECTORY / 'question-mark-2x.xbm' diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png deleted file mode 100644 index 255f273..0000000 Binary files a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png and /dev/null differ diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png deleted file mode 100644 index 650add1..0000000 Binary files a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png and /dev/null differ diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png deleted file mode 100644 index be9458f..0000000 Binary files a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png and /dev/null differ diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png deleted file mode 100644 index 2a6efb0..0000000 Binary files a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png and /dev/null differ diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/file-2x.png b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/file-2x.png deleted file mode 100644 index 4196c44..0000000 Binary files a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/file-2x.png and /dev/null differ diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/list-2x.png b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/list-2x.png deleted file mode 100644 index 1fc4450..0000000 Binary files a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/list-2x.png and /dev/null differ diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm deleted file mode 100644 index 8981c9b..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define question_mark_2x_width 16 -#define question_mark_2x_height 16 -static unsigned char question_mark_2x_bits[] = { - 0xc0, 0x0f, 0xe0, 0x1f, 0x70, 0x38, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x18, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03 }; diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png deleted file mode 100644 index 2a79f16..0000000 Binary files a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png and /dev/null differ diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm b/Chapter11/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm deleted file mode 100644 index 940af96..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define x_2x_width 16 -#define x_2x_height 16 -static unsigned char x_2x_bits[] = { - 0x04, 0x10, 0x0e, 0x38, 0x1f, 0x7c, 0x3e, 0x7e, 0x7c, 0x3f, 0xf8, 0x1f, - 0xf0, 0x0f, 0xe0, 0x07, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0x7e, 0x3e, - 0x3f, 0x7c, 0x1e, 0x78, 0x0c, 0x30, 0x00, 0x00 }; diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index 4d3d72a..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,362 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import font - -from . import images - -class GenericMainMenu(tk.Menu): - """The Application's main menu""" - - accelerators = { - 'file_open': 'Ctrl+O', - 'quit': 'Ctrl+Q', - 'record_list': 'Ctrl+L', - 'new_record': 'Ctrl+R', - } - - keybinds = { - '': '<>', - '': '<>', - '': '<>', - '': '<>' - } - - styles = {} - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def _create_icons(self): - - # must be done in a method because PhotoImage can't be created - # until there is a Tk instance. - # There isn't one when the class is defined, but there is when - # the instance is created. - self.icons = { - 'file_open': tk.PhotoImage(file=images.SAVE_ICON), - 'record_list': tk.PhotoImage(file=images.LIST_ICON), - 'new_record': tk.PhotoImage(file=images.FORM_ICON), - 'quit': tk.BitmapImage(file=images.QUIT_BMP, foreground='red'), - 'about': tk.BitmapImage( - file=images.ABOUT_BMP, foreground='#CC0', background='#A09' - ), - } - - def _add_file_open(self, menu): - - menu.add_command( - label='Select file…', command=self._event('<>'), - image=self.icons.get('file'), compound=tk.LEFT - ) - - def _add_quit(self, menu): - menu.add_command( - label='Quit', command=self._event('<>'), - image=self.icons.get('quit'), compound=tk.LEFT - ) - - def _add_autofill_date(self, menu): - menu.add_checkbutton( - label='Autofill Date', variable=self.settings['autofill date'] - ) - - def _add_autofill_sheet(self, menu): - menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - def _add_font_size_menu(self, menu): - font_size_menu = tk.Menu(self, tearoff=False, **self.styles) - for size in range(6, 17, 1): - font_size_menu.add_radiobutton( - label=size, value=size, - variable=self.settings['font size'] - ) - menu.add_cascade(label='Font size', menu=font_size_menu) - - def _add_font_family_menu(self, menu): - font_family_menu = tk.Menu(self, tearoff=False, **self.styles) - for family in font.families(): - font_family_menu.add_radiobutton( - label=family, value=family, - variable=self.settings['font family'] - ) - menu.add_cascade(label='Font family', menu=font_family_menu) - - def _add_themes_menu(self, menu): - style = ttk.Style() - themes_menu = tk.Menu(self, tearoff=False, **self.styles) - for theme in style.theme_names(): - themes_menu.add_radiobutton( - label=theme, value=theme, - variable=self.settings['theme'] - ) - menu.add_cascade(label='Theme', menu=themes_menu) - self.settings['theme'].trace_add('write', self._on_theme_change) - - def _add_go_record_list(self, menu): - menu.add_command( - label="Record List", command=self._event('<>'), - image=self.icons.get('record_list'), compound=tk.LEFT - ) - - def _add_go_new_record(self, menu): - menu.add_command( - label="New Record", command=self._event('<>'), - image=self.icons.get('new_record'), compound=tk.LEFT - ) - - def _add_about(self, menu): - menu.add_command( - label='About…', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - # The file menu - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The options menu - self._menus['Options'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Options']) - self._add_autofill_sheet(self._menus['Options']) - self._add_font_size_menu(self._menus['Options']) - self._add_font_family_menu(self._menus['Options']) - self._add_themes_menu(self._menus['Options']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self.add_cascade(label='Help', menu=self._menus['Help']) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - self.configure(**self.styles) - - def __init__(self, parent, settings, **kwargs): - super().__init__(parent, **kwargs) - self.settings = settings - self._create_icons() - self._menus = dict() - self._build_menu() - self._bind_accelerators() - self.configure(**self.styles) - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo( - title='About', message=about_message, detail=about_detail - ) - @staticmethod - def _on_theme_change(*_): - """Popup a message about theme changes""" - message = "Change requires restart" - detail = ( - "Theme changes do not take effect" - " until application restart" - ) - messagebox.showwarning( - title='Warning', - message=message, - detail=detail - ) - - def _bind_accelerators(self): - - for key, sequence in self.keybinds.items(): - self.bind_all(key, self._event(sequence)) - -class WindowsMainMenu(GenericMainMenu): - """ - Changes: - - Windows uses file->exit instead of file->quit, - and no accelerator is used. - - Windows can handle commands on the menubar, so - put 'Record List' / 'New Record' on the bar - - Windows can't handle icons on the menu bar, though - - Put 'options' under 'Tools' with separator - """ - - def _create_icons(self): - super()._create_icons() - del(self.icons['new_record']) - del(self.icons['record_list']) - - def __init__(self, *args, **kwargs): - del(self.keybinds['']) - super().__init__(*args, **kwargs) - - def _add_quit(self, menu): - menu.add_command( - label='Exit', - command=self._event('<>'), - image=self.icons.get('quit'), - compound=tk.LEFT - ) - - def _build_menu(self): - # File Menu - self._menus['File'] = tk.Menu(self, tearoff=False) - self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Tools']) - self._add_autofill_sheet(self._menus['Tools']) - self._add_font_size_menu(self._menus['Tools']) - self._add_font_family_menu(self._menus['Tools']) - self._add_themes_menu(self._menus['Tools']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False) - self._add_about(self._menus['Help']) - - # Build main menu - self.add_cascade(label='File', menu=self._menus['File']) - self.add_cascade(label='Tools', menu=self._menus['Tools']) - self._add_go_record_list(self) - self._add_go_new_record(self) - self.add_cascade(label='Help', menu=self._menus['Help']) - - -class LinuxMainMenu(GenericMainMenu): - """Differences for Linux: - - - Edit menu for autofill options - - View menu for font & theme options - - Use color theme for menu - """ - styles = { - 'background': '#333', - 'foreground': 'white', - 'activebackground': '#777', - 'activeforeground': 'white', - 'relief': tk.GROOVE - } - - - def _build_menu(self): - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The edit menu - self._menus['Edit'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - # The View menu - self._menus['View'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -class MacOsMainMenu(GenericMainMenu): - """ - Differences for MacOS: - - - Create App Menu - - Move about to app menu, remove 'help' - - Remove redundant quit command - - Change accelerators to Command-[] - - Add View menu for font & theme options - - Add Edit menu for autofill options - - Add Window menu for navigation commands - """ - keybinds = { - '': '<>', - '': '<>', - '': '<>' - } - accelerators = { - 'file_open': 'Cmd-O', - 'record_list': 'Cmd-L', - 'new_record': 'Cmd-R', - } - - def _add_about(self, menu): - menu.add_command( - label='About ABQ Data Entry', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - self._menus['ABQ Data Entry'] = tk.Menu( - self, tearoff=False, - name='apple' - ) - self._add_about(self._menus['ABQ Data Entry']) - self._menus['ABQ Data Entry'].add_separator() - - self._menus['File'] = tk.Menu(self, tearoff=False) - self._add_file_open(self._menus['File']) - - self._menus['Edit'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - # View menu - self._menus['View'] = tk.Menu(self, tearoff=False) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # Window Menu - self._menus['Window'] = tk.Menu(self, name='window', tearoff=False) - self._add_go_record_list(self._menus['Window']) - self._add_go_new_record(self._menus['Window']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -def get_main_menu_for_os(os_name): - """Return the menu class appropriate to the given OS""" - menus = { - 'Linux': LinuxMainMenu, - 'Darwin': MacOsMainMenu, - 'freebsd7': LinuxMainMenu, - 'Windows': WindowsMainMenu - } - - return menus.get(os_name, GenericMainMenu) diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index 0a879f4..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,180 +0,0 @@ -import csv -from pathlib import Path -import os -import json -import platform - -from .constants import FieldTypes as FT -from decimal import Decimal -from datetime import datetime - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data, rownum=None): - """Save a dict of data to the CSV file""" - - if rownum is None: - # This is a new record - newfile = not self.file.exists() - - with open(self.file, 'a', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - else: - # This is an update - records = self.get_all_records() - records[rownum] = data - with open(self.file, 'w', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - csvwriter.writeheader() - csvwriter.writerows(records) - - def get_all_records(self): - """Read in all records from the CSV and return a list""" - if not self.file.exists(): - return [] - - with open(self.file, 'r', encoding='utf-8') as fh: - # Casting to list is necessary for unit tests to work - csvreader = csv.DictReader(fh) - missing_fields = set(self.fields.keys()) - set(csvreader.fieldnames) - if len(missing_fields) > 0: - fields_string = ', '.join(missing_fields) - raise Exception( - f"File is missing fields: {fields_string}" - ) - records = list(csvreader) - - # Correct issue with boolean fields - trues = ('true', 'yes', '1') - bool_fields = [ - key for key, meta - in self.fields.items() - if meta['type'] == FT.boolean - ] - for record in records: - for key in bool_fields: - record[key] = record[key].lower() in trues - return records - - def get_record(self, rownum): - """Get a single record by row number - - Callling code should catch IndexError - in case of a bad rownum. - """ - - return self.get_all_records()[rownum] - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'} - } - - config_dirs = { - "Linux": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - "freebsd7": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - 'Darwin': Path.home() / 'Library' / 'Application Support', - 'Windows': Path.home() / 'AppData' / 'Local' - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - filedir = self.config_dirs.get(platform.system(), Path.home()) - self.filepath = filedir / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - json_string = json.dumps(self.fields) - with open(self.filepath, 'w', encoding='utf-8') as fh: - fh.write(json_string) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.loads(fh.read()) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/test/__init__.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/test/test_application.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/test/test_application.py deleted file mode 100644 index 5ac5ce3..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/test/test_application.py +++ /dev/null @@ -1,77 +0,0 @@ -from unittest import TestCase -from unittest.mock import patch -from .. import application - - -class TestApplication(TestCase): - records = [ - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '1', 'Seed Sample': 'AX477', - 'Humidity': '24.09', 'Light': '1.03', 'Temperature': '22.01', - 'Equipment Fault': False, 'Plants': '9', 'Blossoms': '21', - 'Fruit': '3', 'Max Height': '8.7', 'Med Height': '2.73', - 'Min Height': '1.67', 'Notes': '\n\n', - }, - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '2', 'Seed Sample': 'AX478', - 'Humidity': '24.47', 'Light': '1.01', 'Temperature': '21.44', - 'Equipment Fault': False, 'Plants': '14', 'Blossoms': '27', - 'Fruit': '1', 'Max Height': '9.2', 'Med Height': '5.09', - 'Min Height': '2.35', 'Notes': '' - } - ] - - settings = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'} - } - - def setUp(self): - # can be parenthesized in python 3.10+ - with \ - patch( - 'abq_data_entry.application.m.CSVModel' - ) as csvmodel,\ - patch( - 'abq_data_entry.application.m.SettingsModel' - ) as settingsmodel,\ - patch( - 'abq_data_entry.application.Application._show_login' - ) as show_login,\ - patch('abq_data_entry.application.v.DataRecordForm'),\ - patch('abq_data_entry.application.v.RecordList'),\ - patch('abq_data_entry.application.ttk.Notebook'),\ - patch('abq_data_entry.application.get_main_menu_for_os')\ - : - - settingsmodel().fields = self.settings - csvmodel().get_all_records.return_value = self.records - show_login.return_value = True - self.app = application.Application() - - def tearDown(self): - self.app.update() - self.app.destroy() - - def test_show_recordlist(self): - self.app._show_recordlist() - self.app.notebook.select.assert_called_with(self.app.recordlist) - - def test_populate_recordlist(self): - # test correct functions - self.app._populate_recordlist() - self.app.model.get_all_records.assert_called() - self.app.recordlist.populate.assert_called_with(self.records) - - # test exceptions - - self.app.model.get_all_records.side_effect = Exception('Test message') - with patch('abq_data_entry.application.messagebox'): - self.app._populate_recordlist() - application.messagebox.showerror.assert_called_with( - title='Error', message='Problem reading file', - detail='Test message' - ) diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/test/test_models.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/test/test_models.py deleted file mode 100644 index fced4a8..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/test/test_models.py +++ /dev/null @@ -1,137 +0,0 @@ -from .. import models -from unittest import TestCase -from unittest import mock - -from pathlib import Path - -class TestCSVModel(TestCase): - - def setUp(self): - - self.file1_open = mock.mock_open( - read_data=( - "Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light," - "Temperature,Equipment Fault,Plants,Blossoms,Fruit,Min Height," - "Max Height,Med Height,Notes\r\n" - "2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,14," - "27,1,2.35,9.2,5.09,\r\n" - "2021-06-01,8:00,J Simms,A,3,AX479,24.15,1,20.82,False,18,49," - "6,2.47,14.2,11.83,\r\n")) - self.file2_open = mock.mock_open(read_data='') - - self.model1 = models.CSVModel('file1') - self.model2 = models.CSVModel('file2') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_all_records(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - records = self.model1.get_all_records() - - self.assertEqual(len(records), 2) - self.assertIsInstance(records, list) - self.assertIsInstance(records[0], dict) - - fields = ( - 'Date', 'Time', 'Technician', 'Lab', 'Plot', - 'Seed Sample', 'Humidity', 'Light', - 'Temperature', 'Equipment Fault', 'Plants', - 'Blossoms', 'Fruit', 'Min Height', 'Max Height', - 'Med Height', 'Notes') - - for field in fields: - self.assertIn(field, records[0].keys()) - - # testing boolean conversion - self.assertFalse(records[0]['Equipment Fault']) - - self.file1_open.assert_called_with( - Path('file1'), 'r', encoding='utf-8' - ) - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_record(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - record0 = self.model1.get_record(0) - record1 = self.model1.get_record(1) - - self.assertNotEqual(record0, record1) - self.assertEqual(record0['Date'], '2021-06-01') - self.assertEqual(record1['Plot'], '3') - self.assertEqual(record0['Med Height'], '5.09') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_save_record(self, mock_path_exists): - - record = { - "Date": '2021-07-01', "Time": '12:00', - "Technician": 'Test Technician', "Lab": 'E', - "Plot": '17', "Seed Sample": 'test sample', - "Humidity": '10', "Light": '99', - "Temperature": '20', "Equipment Fault": False, - "Plants": '10', "Blossoms": '200', - "Fruit": '250', "Min Height": '40', - "Max Height": '50', "Med Height": '55', - "Notes": 'Test Note\r\nTest Note\r\n' - } - record_as_csv = ( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - - # test appending a file - mock_path_exists.return_value = True - - # test insert - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - self.file2_open.assert_called_with( - Path('file2'), 'a', encoding='utf-8', newline='' - ) - file2_handle = self.file2_open() - file2_handle.write.assert_called_with(record_as_csv) - - # test update - with mock.patch('abq_data_entry.models.open', self.file1_open): - self.model1.save_record(record, 1) - self.file1_open.assert_called_with( - Path('file1'), 'w', encoding='utf-8', newline='' - ) - file1_handle = self.file1_open() - file1_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call( - '2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,' - '14,27,1,2.35,9.2,5.09,\r\n'), - mock.call( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - ]) - - # test new file - mock_path_exists.return_value = False - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - file2_handle = self.file2_open() - file2_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call(record_as_csv) - ]) - with self.assertRaises(IndexError): - self.model2.save_record(record, 2) diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py deleted file mode 100644 index 35b66f2..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py +++ /dev/null @@ -1,241 +0,0 @@ -from .. import widgets -from unittest import TestCase -from unittest.mock import Mock -import tkinter as tk -from tkinter import ttk - - -class TkTestCase(TestCase): - """A test case designed for Tkinter widgets and views""" - - keysyms = { - '-': 'minus', - ' ': 'space', - ':': 'colon', - # For more see http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm - } - @classmethod - def setUpClass(cls): - cls.root = tk.Tk() - cls.root.wait_visibility() - - @classmethod - def tearDownClass(cls): - cls.root.update() - cls.root.destroy() - - def type_in_widget(self, widget, string): - widget.focus_force() - for char in string: - char = self.keysyms.get(char, char) - widget.event_generate(f'') - self.root.update_idletasks() - - def click_on_widget(self, widget, x, y, button=1): - widget.focus_force() - widget.event_generate(f'', x=x, y=y) - self.root.update_idletasks() - - @staticmethod - def find_element(widget, element): - """Return x and y coordinates where element can be found""" - widget.update_idletasks() - x_coords = range(widget.winfo_width()) - y_coords = range(widget.winfo_height()) - for x in x_coords: - for y in y_coords: - if widget.identify(x, y) == element: - return (x + 1, y + 1) - raise Exception(f'{element} was not found in widget') - - -class TestValidatedMixin(TkTestCase): - - def setUp(self): - class TestClass(widgets.ValidatedMixin, ttk.Entry): - pass - self.vw1 = TestClass(self.root) - - def assertEndsWith(self, text, ending): - if not text.endswith(ending): - raise AssertionError( - "'{}' does not end with '{}'".format(text, ending) - ) - - def test_init(self): - - # check error var setup - self.assertIsInstance(self.vw1.error, tk.StringVar) - - # check validation config - self.assertEqual(self.vw1.cget('validate'), 'all') - self.assertEndsWith( - self.vw1.cget('validatecommand'), - '%P %s %S %V %i %d' - ) - self.assertEndsWith( - self.vw1.cget('invalidcommand'), - '%P %s %S %V %i %d' - ) - - def test__validate(self): - - # by default, _validate should return true - args = { - 'proposed': 'abc', - 'current': 'ab', - 'char': 'c', - 'event': 'key', - 'index': '2', - 'action': '1' - } - # test key validate routing - self.assertTrue( - self.vw1._validate(**args) - ) - fake_key_val = Mock(return_value=False) - self.vw1._key_validate = fake_key_val - self.assertFalse( - self.vw1._validate(**args) - ) - fake_key_val.assert_called_with(**args) - - # test focusout validate routing - args['event'] = 'focusout' - self.assertTrue(self.vw1._validate(**args)) - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - self.assertFalse(self.vw1._validate(**args)) - fake_focusout_val.assert_called_with(event='focusout') - - - def test_trigger_focusout_validation(self): - - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - fake_focusout_invalid = Mock() - self.vw1._focusout_invalid = fake_focusout_invalid - - val = self.vw1.trigger_focusout_validation() - self.assertFalse(val) - fake_focusout_val.assert_called_with(event='focusout') - fake_focusout_invalid.assert_called_with(event='focusout') - - -class TestValidatedSpinbox(TkTestCase): - - def setUp(self): - self.value = tk.DoubleVar() - self.vsb = widgets.ValidatedSpinbox( - self.root, - textvariable=self.value, - from_=-10, to=10, increment=1 - ) - self.vsb.pack() - self.vsb.wait_visibility() - ttk.Style().theme_use('classic') - self.vsb.update_idletasks() - - def tearDown(self): - self.vsb.destroy() - - def key_validate(self, new, current=''): - return self.vsb._key_validate( - new, # inserted char - 'end', # position to insert - current, # current value - current + new, # proposed value - '1' # action code (1 == insert) - ) - - def click_arrow_naive(self, arrow, times=1): - x = self.vsb.winfo_width() - 5 - y = 5 if arrow == 'up' else 15 - for _ in range(times): - self.click_on_widget(self.vsb, x=x, y=y) - - def click_arrow(self, arrow, times=1): - """Click the arrow the given number of times. - - arrow must be up or down""" - # Format for classic theme - element = f'{arrow}arrow' - x, y = self.find_element(self.vsb, element) - for _ in range(times): - self.click_on_widget(self.vsb, x=x, y=y) - - def test_key_validate(self): - ################### - # Unit-test Style # - ################### - # test valid input - for x in range(10): - x = str(x) - p_valid = self.vsb._key_validate(x, 'end', '', x, '1') - n_valid = self.vsb._key_validate(x, 'end', '-', '-' + x, '1') - self.assertTrue(p_valid) - self.assertTrue(n_valid) - - def test_key_validate_letters(self): - valid = self.key_validate('a') - self.assertFalse(valid) - - def test_key_validate_increment(self): - valid = self.key_validate('1', '0.') - self.assertFalse(valid) - - def test_key_validate_high(self): - valid = self.key_validate('0', '10') - self.assertFalse(valid) - - def test_key_validate_integration(self): - ########################## - # Integration test style # - ########################## - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '10') - self.assertEqual(self.vsb.get(), '10') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, 'abcdef') - self.assertEqual(self.vsb.get(), '') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '200') - self.assertEqual(self.vsb.get(), '2') - - def test_focusout_validate(self): - - # test valid - for x in range(10): - self.value.set(x) - posvalid = self.vsb._focusout_validate() - self.value.set(-x) - negvalid = self.vsb._focusout_validate() - - self.assertTrue(posvalid) - self.assertTrue(negvalid) - - # test too low - self.value.set('-200') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - # test invalid number - self.vsb.delete(0, 'end') - self.vsb.insert('end', '-a2-.3') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - def test_arrows(self): - self.value.set(0) - self.vsb.update() - self.click_arrow('up', times=1) - self.assertEqual(self.vsb.get(), '1') - - self.click_arrow('up', times=5) - self.assertEqual(self.vsb.get(), '6') - - self.click_arrow(arrow='down', times=1) - self.assertEqual(self.vsb.get(), '5') diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index a188493..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,510 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT -from . import images - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, style='', cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - if style: - frame.configure(style=style) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # new for ch9 - style = ttk.Style() - - # Frame styles - style.configure( - 'RecordInfo.TLabelframe', - background='khaki', padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe', background='lightblue', - padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe', - background='lightgreen', padx=10, pady=10 - ) - # Style the label Element as well - style.configure( - 'RecordInfo.TLabelframe.Label', background='khaki', - padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe.Label', - background='lightblue', padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe.Label', - background='lightgreen', padx=10, pady=10 - ) - - # Style for the form labels and buttons - style.configure('RecordInfo.TLabel', background='khaki') - style.configure('RecordInfo.TRadiobutton', background='khaki') - style.configure('EnvironmentInfo.TLabel', background='lightblue') - style.configure( - 'EnvironmentInfo.TCheckbutton', - background='lightblue' - ) - style.configure('PlantInfo.TLabel', background='lightgreen') - - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # new chapter 8 - # variable to track current record id - self.current_record = None - - # Label for displaying what record we're editing - self.record_label = ttk.Label(self) - self.record_label.grid(row=0, column=0) - - # Record info section - r_info = self._add_frame( - "Record Information", 'RecordInfo.TLabelframe' - ) - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - label_args={'style': 'RecordInfo.TLabel'}, - input_args={ - 'button_args':{'style': 'RecordInfo.TRadiobutton'} - } - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame( - "Environment Data", 'EnvironmentInfo.TLabelframe' - ) - - e_info = ttk.LabelFrame( - self, - text="Environment Data", - style='EnvironmentInfo.TLabelframe' - ) - e_info.grid(row=2, column=0, sticky="we") - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - disable_var=self._vars['Equipment Fault'], - var=self._vars['Temperature'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'}, - input_args={'style': 'EnvironmentInfo.TCheckbutton'} - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data", 'PlantInfo.TLabelframe') - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=2) - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={"max_var": max_height_var, - "focus_update_var": min_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={"min_var": min_height_var, - "focus_update_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={"min_var": min_height_var, - "max_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=2) - - - # Notes section -- Update grid row value for ch8 - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=4, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=5) - self.save_button_logo = tk.PhotoImage(file=images.SAVE_ICON) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save, - image=self.save_button_logo, compound=tk.LEFT - ) - self.savebutton.pack(side=tk.RIGHT) - - self.reset_button_logo = tk.PhotoImage(file=images.RESET_ICON) - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset, - image=self.reset_button_logo, compound=tk.LEFT - ) - self.resetbutton.pack(side=tk.RIGHT) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - # new for ch8 - def load_record(self, rownum, data=None): - self.current_record = rownum - if rownum is None: - self.reset() - self.record_label.config(text='New Record') - else: - self.record_label.config(text=f'Record #{rownum}') - for key, var in self._vars.items(): - var.set(data.get(key, '')) - try: - var.label_widget.input.trigger_focusout_validation() - except AttributeError: - pass - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) - - -class RecordList(tk.Frame): - """Display for CSV file contents""" - - column_defs = { - '#0': {'label': 'Row', 'anchor': tk.W}, - 'Date': {'label': 'Date', 'width': 150, 'stretch': True}, - 'Time': {'label': 'Time'}, - 'Lab': {'label': 'Lab', 'width': 40}, - 'Plot': {'label': 'Plot', 'width': 80} - } - default_width = 100 - default_minwidth = 10 - default_anchor = tk.CENTER - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self._inserted = list() - self._updated = list() - - self.columnconfigure(0, weight=1) - self.rowconfigure(0, weight=1) - - # create treeview - self.treeview = ttk.Treeview( - self, - columns=list(self.column_defs.keys())[1:], - selectmode='browse' - ) - self.treeview.grid(row=0, column=0, sticky='NSEW') - - # Configure treeview columns - for name, definition in self.column_defs.items(): - label = definition.get('label', '') - anchor = definition.get('anchor', self.default_anchor) - minwidth = definition.get('minwidth', self.default_minwidth) - width = definition.get('width', self.default_width) - stretch = definition.get('stretch', False) - self.treeview.heading(name, text=label, anchor=anchor) - self.treeview.column( - name, anchor=anchor, minwidth=minwidth, - width=width, stretch=stretch - ) - - self.treeview.bind('', self._on_open_record) - self.treeview.bind('', self._on_open_record) - - # configure scrollbar for the treeview - self.scrollbar = ttk.Scrollbar( - self, - orient=tk.VERTICAL, - command=self.treeview.yview - ) - self.treeview.configure(yscrollcommand=self.scrollbar.set) - self.scrollbar.grid(row=0, column=1, sticky='NSW') - - # configure tagging - self.treeview.tag_configure('inserted', background='lightgreen') - self.treeview.tag_configure('updated', background='lightblue') - - def populate(self, rows): - """Clear the treeview and write the supplied data rows to it.""" - for row in self.treeview.get_children(): - self.treeview.delete(row) - - cids = list(self.column_defs.keys())[1:] - for rownum, rowdata in enumerate(rows): - values = [rowdata[cid] for cid in cids] - if rownum in self._inserted: - tag = 'inserted' - elif rownum in self._updated: - tag = 'updated' - else: - tag = '' - self.treeview.insert( - '', 'end', iid=str(rownum), - text=str(rownum), values=values, tag=tag) - - if len(rows) > 0: - self.treeview.focus_set() - self.treeview.selection_set('0') - self.treeview.focus('0') - - def _on_open_record(self, *args): - self.event_generate('<>') - - @property - def selected_id(self): - selection = self.treeview.selection() - return int(selection[0]) if selection else None - - def add_updated_row(self, row): - if row not in self._updated: - self._updated.append(row) - - def add_inserted_row(self, row): - if row not in self._inserted: - self._inserted.append(row) - - def clear_tags(self): - self._inserted.clear() - self._updated.clear() diff --git a/Chapter11/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter11/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index ec72ed4..0000000 --- a/Chapter11/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,441 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - style = ttk.Style() - widget_class = self.winfo_class() - validated_style = 'ValidatedInput.' + widget_class - style.map( - validated_style, - foreground=[('invalid', 'white'), ('!invalid', 'black')], - fieldbackground=[('invalid', 'darkred'), ('!invalid', 'white')] - ) - self.configure(style=validated_style) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - pass - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.input.error = getattr(button, 'error', None) - self.input.trigger_focusout_validation = \ - button._focusout_validate - else: - self.input = input_class(self, **input_args) - - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - error_style = 'Error.' + label_args.get('style', 'TLabel') - ttk.Style().configure(error_style, foreground='darkred') - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error, style=error_style).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter11/ABQ_Data_Entry/docs/Application_layout.png b/Chapter11/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter11/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter11/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter11/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index fec5e84..0000000 --- a/Chapter11/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,97 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - - -Description ------------ -The program is being created to minimize data entry errors for laboratory measurements. - -Functionality Required ----------------------- - -The program must: - -* Provide a UI for reading, updating, and appending data to the CSV file -* allow all relevant, valid data to be entered, as per the field chart -* append entered data to a CSV file - - The CSV file must have a filename of abq_data_record_CURRENTDATE.csv, - where CURRENTDATE is the date of the checks in ISO format (Year-month-day) - - The CSV file must have all the fields as per the chart - -* enforce correct datatypes per field -* have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout -* prevent saving the record when errors are present - -The program should try, whenever possible, to: - -* enforce reasonable limits on data entered -* Auto-fill data -* Suggest likely correct values -* Provide a smooth and efficient workflow - -Functionality Not Required --------------------------- - -The program does not need to: - -* Allow deletion of data. - -Limitations ------------ - -The program must: - -* Be efficiently operable by keyboard-only users. -* Be accessible to color blind users. -* Run on Debian Linux. -* Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+----------+------+------------------+--------------------------+ -|Field | Datatype | Units| Range |Descripton | -+============+==========+======+==================+==========================+ -|Date |Date | | |Date of record | -+------------+----------+------+------------------+--------------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00 | | -+------------+----------+------+------------------+--------------------------+ -|Lab |String | | A - C |Lab ID | -+------------+----------+------+------------------+--------------------------+ -|Technician |String | | |Technician name | -+------------+----------+------+------------------+--------------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+----------+------+------------------+--------------------------+ -|Seed |String | | |Seed sample ID | -|sample | | | | | -+------------+----------+------+------------------+--------------------------+ -|Fault |Bool | | |Fault on environmental | -| | | | |sensor | -+------------+----------+------+------------------+--------------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -+------------+----------+------+------------------+--------------------------+ -|Humidity |Decimal |g/m³ | 0.5 - 52.0 |Abs humidity at plot | -+------------+----------+------+------------------+--------------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -+------------+----------+------+------------------+--------------------------+ -|Blossoms |Int | | 0 - 1000 |Number of blossoms in plot| -+------------+----------+------+------------------+--------------------------+ -|Fruit |Int | | 0 - 1000 |Number of fruits in plot | -+------------+----------+------+------------------+--------------------------+ -|Plants |Int | | 0 - 20 |Number of plants in plot | -+------------+----------+------+------------------+--------------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest plant in| -| | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest plant | -| | | | |in plot | -+------------+----------+------+------------------+--------------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of plants in| -|height | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+----------+------+------------------+--------------------------+ diff --git a/Chapter11/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter11/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter11/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter11/unittest_demo/mycalc.py b/Chapter11/unittest_demo/mycalc.py deleted file mode 100644 index b76fba2..0000000 --- a/Chapter11/unittest_demo/mycalc.py +++ /dev/null @@ -1,27 +0,0 @@ -import random - -class MyCalc: - - def __init__(self, a, b): - self.a = a - self.b = b - - def add(self): - return self.a + self.b - - def mod_divide(self): - if self.b == 0: - raise ValueError("Cannot divide by zero") - return (int(self.a / self.b), self.a % self.b) - - def mod_divide2(self): - if type(self.a) is not int or type(self.b) is not int: - raise ValueError("Method only valid for ints") - if self.b == 0: - raise ValueError("Cannot divide by zero") - return (self.a // self.b, self.a % self.b) - - def rand_between(self): - return ( - (random.random() * abs(self.a - self.b)) + - min(self.a, self.b)) diff --git a/Chapter11/unittest_demo/test_mycalc.py b/Chapter11/unittest_demo/test_mycalc.py deleted file mode 100644 index 3a63178..0000000 --- a/Chapter11/unittest_demo/test_mycalc.py +++ /dev/null @@ -1,51 +0,0 @@ -import mycalc -import unittest -from unittest.mock import Mock, patch - -class TestMyCalc(unittest.TestCase): - - def setUp(self): - self.mycalc1_0 = mycalc.MyCalc(1, 0) - self.mycalc36_12 = mycalc.MyCalc(36, 12) - - def test_add(self): - self.assertEqual(self.mycalc1_0.add(), 1) - self.assertEqual(self.mycalc36_12.add(), 48) - - def test_mod_divide(self): - self.assertEqual(self.mycalc36_12.mod_divide(), (3, 0)) - self.assertRaises(ValueError, self.mycalc1_0.mod_divide) - - with self.assertRaises(ValueError): - self.mycalc1_0.mod_divide() - - def test_rand_between(self): - - # not a good way to do it: - rv = self.mycalc1_0.rand_between() - self.assertLessEqual(rv, 1) - self.assertGreaterEqual(rv, 0) - - # better, but clumsy - fakerandom = Mock(return_value=.5) - orig_random = mycalc.random.random - mycalc.random.random = fakerandom - rv = self.mycalc1_0.rand_between() - self.assertEqual(rv, 0.5) - mycalc.random.random = orig_random - - # clean and neat - with patch('mycalc.random.random') as fakerandom: - fakerandom.return_value = 0.5 - rv = self.mycalc1_0.rand_between() - self.assertEqual(rv, 0.5) - - @patch('mycalc.random.random') - def test_rand_between2(self, fakerandom): - fakerandom.return_value = 0.5 - rv = self.mycalc1_0.rand_between() - self.assertEqual(rv, 0.5) - - -if __name__ == '__main__': - unittest.main() diff --git a/Chapter11/unittest_demo/test_mycalc_badly.py b/Chapter11/unittest_demo/test_mycalc_badly.py deleted file mode 100644 index c8c78de..0000000 --- a/Chapter11/unittest_demo/test_mycalc_badly.py +++ /dev/null @@ -1,15 +0,0 @@ -import mycalc -import unittest - - -class TestMyCalc(unittest.TestCase): - - def test_add(self): - mc = mycalc.MyCalc(1, 10) - assert mc.add() == 11 - - # much better error output - self.assertEqual(mc.add(), 12) - -if __name__ == '__main__': - unittest.main() diff --git a/Chapter11/unittest_demo/test_mycalc_no_unittest.py b/Chapter11/unittest_demo/test_mycalc_no_unittest.py deleted file mode 100644 index 3bb636f..0000000 --- a/Chapter11/unittest_demo/test_mycalc_no_unittest.py +++ /dev/null @@ -1,12 +0,0 @@ -from mycalc import MyCalc - -mc1 = MyCalc(1, 100) -mc2 = MyCalc(10, 4) - -try: - assert mc1.add() == 101, "Test of add() failed." - assert mc2.mod_divide() == (2, 2), "Test of mod_divide() failed." -except AssertionError as e: - print("Test failed: ", e) -else: - print("Tests succeeded!") diff --git a/Chapter12/ABQ_Data_Entry/.gitignore b/Chapter12/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter12/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter12/ABQ_Data_Entry/README.rst b/Chapter12/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter12/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry.py b/Chapter12/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index cc3219f..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,277 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog -from tkinter import font -import platform - -from . import views as v -from . import models as m -from .mainmenu import get_main_menu_for_os -from . import images - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # move here for ch12 because we need some settings data to authenticate - self.settings_model = m.SettingsModel() - self._load_settings() - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - self.deiconify() - - # Create model - # remove for ch12 - # self.model = m.CSVModel() - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Set taskbar icon - self.taskbar_icon = tk.PhotoImage(file=images.ABQ_LOGO_64) - self.iconphoto(True, self.taskbar_icon) - - # Create the menu - #menu = MainMenu(self, self.settings) - menu_class = get_main_menu_for_os(platform.system()) - menu = menu_class(self, self.settings) - - self.config(menu=menu) - event_callbacks = { -# remove file capabilities for ch12 -# '<>': self._on_file_select, - '<>': lambda _: self.quit(), - '<>': self._show_recordlist, - '<>': self._new_record, - - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - # new for ch9 - self.logo = tk.PhotoImage(file=images.ABQ_LOGO_32) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16), - image=self.logo, - compound=tk.LEFT - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform_icon = tk.PhotoImage(file=images.FORM_ICON) - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.notebook.add( - self.recordform, text='Entry Form', - image=self.recordform_icon, compound=tk.LEFT - ) - self.recordform.bind('<>', self._on_save) - - - # The data record list - self.recordlist_icon = tk.PhotoImage(file=images.LIST_ICON) - self.recordlist = v.RecordList(self) - self.notebook.insert( - 0, self.recordlist, text='Records', - image=self.recordlist_icon, compound=tk.LEFT - ) - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rowkey = self.recordform.current_record - self.model.save_record(data, rowkey) - if rowkey is not None: - self.recordlist.add_updated_row(rowkey) - else: - rowkey = (data['Date'], data['Time'], data['Lab'], data['Plot']) - self.recordlist.add_inserted_row(rowkey) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - -# Remove for ch12 -# def _on_file_select(self, *_): -# """Handle the file->select action""" -# -# filename = filedialog.asksaveasfilename( -# title='Select the target file for saving records', -# defaultextension='.csv', -# filetypes=[('CSV', '*.csv *.CSV')] -# ) -# if filename: -# self.model = m.CSVModel(filename=filename) -# self.inserted_rows.clear() -# self.updated_rows.clear() -# self._populate_recordlist() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - # new ch12 - def _database_login(self, username, password): - """Try to login to the database and create self.data_model""" - db_host = self.settings['db_host'].get() - db_name = self.settings['db_name'].get() - try: - self.model = m.SQLModel( - db_host, db_name, username, password) - except m.pg.OperationalError as e: - print(e) - return False - return True - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._database_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - # update font settings after loading them - self._set_font() - self.settings['font size'].trace_add('write', self._set_font) - self.settings['font family'].trace_add('write', self._set_font) - - # process theme - style = ttk.Style() - theme = self.settings.get('theme').get() - if theme in style.theme_names(): - style.theme_use(theme) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None, None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the Record selected recordlist id in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - return - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) - - # new chapter 9 - def _set_font(self, *_): - """Set the application's font""" - font_size = self.settings['font size'].get() - font_family = self.settings['font family'].get() - font_names = ('TkDefaultFont', 'TkMenuFont', 'TkTextFont') - for font_name in font_names: - tk_font = font.nametofont(font_name) - tk_font.config(size=font_size, family=font_family) diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/__init__.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/__init__.py deleted file mode 100644 index 57538d9..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from pathlib import Path - -# This gives us the parent directory of this file (__init__.py) -IMAGE_DIRECTORY = Path(__file__).parent - -ABQ_LOGO_16 = IMAGE_DIRECTORY / 'abq_logo-16x10.png' -ABQ_LOGO_32 = IMAGE_DIRECTORY / 'abq_logo-32x20.png' -ABQ_LOGO_64 = IMAGE_DIRECTORY / 'abq_logo-64x40.png' - -# PNG icons - -SAVE_ICON = IMAGE_DIRECTORY / 'file-2x.png' -RESET_ICON = IMAGE_DIRECTORY / 'reload-2x.png' -LIST_ICON = IMAGE_DIRECTORY / 'list-2x.png' -FORM_ICON = IMAGE_DIRECTORY / 'browser-2x.png' - - -# BMP icons -QUIT_BMP = IMAGE_DIRECTORY / 'x-2x.xbm' -ABOUT_BMP = IMAGE_DIRECTORY / 'question-mark-2x.xbm' diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png deleted file mode 100644 index 255f273..0000000 Binary files a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png and /dev/null differ diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png deleted file mode 100644 index 650add1..0000000 Binary files a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png and /dev/null differ diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png deleted file mode 100644 index be9458f..0000000 Binary files a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png and /dev/null differ diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png deleted file mode 100644 index 2a6efb0..0000000 Binary files a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png and /dev/null differ diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/file-2x.png b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/file-2x.png deleted file mode 100644 index 4196c44..0000000 Binary files a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/file-2x.png and /dev/null differ diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/list-2x.png b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/list-2x.png deleted file mode 100644 index 1fc4450..0000000 Binary files a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/list-2x.png and /dev/null differ diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm deleted file mode 100644 index 8981c9b..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define question_mark_2x_width 16 -#define question_mark_2x_height 16 -static unsigned char question_mark_2x_bits[] = { - 0xc0, 0x0f, 0xe0, 0x1f, 0x70, 0x38, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x18, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03 }; diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png deleted file mode 100644 index 2a79f16..0000000 Binary files a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png and /dev/null differ diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm b/Chapter12/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm deleted file mode 100644 index 940af96..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define x_2x_width 16 -#define x_2x_height 16 -static unsigned char x_2x_bits[] = { - 0x04, 0x10, 0x0e, 0x38, 0x1f, 0x7c, 0x3e, 0x7e, 0x7c, 0x3f, 0xf8, 0x1f, - 0xf0, 0x0f, 0xe0, 0x07, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0x7e, 0x3e, - 0x3f, 0x7c, 0x1e, 0x78, 0x0c, 0x30, 0x00, 0x00 }; diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index 78d92f7..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,362 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import font - -from . import images - -class GenericMainMenu(tk.Menu): - """The Application's main menu""" - - accelerators = { - 'file_open': 'Ctrl+O', - 'quit': 'Ctrl+Q', - 'record_list': 'Ctrl+L', - 'new_record': 'Ctrl+R', - } - - keybinds = { - '': '<>', - '': '<>', - '': '<>', - '': '<>' - } - - styles = {} - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def _create_icons(self): - - # must be done in a method because PhotoImage can't be created - # until there is a Tk instance. - # There isn't one when the class is defined, but there is when - # the instance is created. - self.icons = { - # 'file_open': tk.PhotoImage(file=images.SAVE_ICON), - 'record_list': tk.PhotoImage(file=images.LIST_ICON), - 'new_record': tk.PhotoImage(file=images.FORM_ICON), - 'quit': tk.BitmapImage(file=images.QUIT_BMP, foreground='red'), - 'about': tk.BitmapImage( - file=images.ABOUT_BMP, foreground='#CC0', background='#A09' - ), - } - - def _add_file_open(self, menu): - - menu.add_command( - label='Select file…', command=self._event('<>'), - image=self.icons.get('file'), compound=tk.LEFT - ) - - def _add_quit(self, menu): - menu.add_command( - label='Quit', command=self._event('<>'), - image=self.icons.get('quit'), compound=tk.LEFT - ) - - def _add_autofill_date(self, menu): - menu.add_checkbutton( - label='Autofill Date', variable=self.settings['autofill date'] - ) - - def _add_autofill_sheet(self, menu): - menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - def _add_font_size_menu(self, menu): - font_size_menu = tk.Menu(self, tearoff=False, **self.styles) - for size in range(6, 17, 1): - font_size_menu.add_radiobutton( - label=size, value=size, - variable=self.settings['font size'] - ) - menu.add_cascade(label='Font size', menu=font_size_menu) - - def _add_font_family_menu(self, menu): - font_family_menu = tk.Menu(self, tearoff=False, **self.styles) - for family in font.families(): - font_family_menu.add_radiobutton( - label=family, value=family, - variable=self.settings['font family'] - ) - menu.add_cascade(label='Font family', menu=font_family_menu) - - def _add_themes_menu(self, menu): - style = ttk.Style() - themes_menu = tk.Menu(self, tearoff=False, **self.styles) - for theme in style.theme_names(): - themes_menu.add_radiobutton( - label=theme, value=theme, - variable=self.settings['theme'] - ) - menu.add_cascade(label='Theme', menu=themes_menu) - self.settings['theme'].trace_add('write', self._on_theme_change) - - def _add_go_record_list(self, menu): - menu.add_command( - label="Record List", command=self._event('<>'), - image=self.icons.get('record_list'), compound=tk.LEFT - ) - - def _add_go_new_record(self, menu): - menu.add_command( - label="New Record", command=self._event('<>'), - image=self.icons.get('new_record'), compound=tk.LEFT - ) - - def _add_about(self, menu): - menu.add_command( - label='About…', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - # The file menu - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) - #self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The options menu - self._menus['Options'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Options']) - self._add_autofill_sheet(self._menus['Options']) - self._add_font_size_menu(self._menus['Options']) - self._add_font_family_menu(self._menus['Options']) - self._add_themes_menu(self._menus['Options']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self.add_cascade(label='Help', menu=self._menus['Help']) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - self.configure(**self.styles) - - def __init__(self, parent, settings, **kwargs): - super().__init__(parent, **kwargs) - self.settings = settings - self._create_icons() - self._menus = dict() - self._build_menu() - self._bind_accelerators() - self.configure(**self.styles) - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo( - title='About', message=about_message, detail=about_detail - ) - @staticmethod - def _on_theme_change(*_): - """Popup a message about theme changes""" - message = "Change requires restart" - detail = ( - "Theme changes do not take effect" - " until application restart" - ) - messagebox.showwarning( - title='Warning', - message=message, - detail=detail - ) - - def _bind_accelerators(self): - - for key, sequence in self.keybinds.items(): - self.bind_all(key, self._event(sequence)) - -class WindowsMainMenu(GenericMainMenu): - """ - Changes: - - Windows uses file->exit instead of file->quit, - and no accelerator is used. - - Windows can handle commands on the menubar, so - put 'Record List' / 'New Record' on the bar - - Windows can't handle icons on the menu bar, though - - Put 'options' under 'Tools' with separator - """ - - def _create_icons(self): - super()._create_icons() - del(self.icons['new_record']) - del(self.icons['record_list']) - - def __init__(self, *args, **kwargs): - del(self.keybinds['']) - super().__init__(*args, **kwargs) - - def _add_quit(self, menu): - menu.add_command( - label='Exit', - command=self._event('<>'), - image=self.icons.get('quit'), - compound=tk.LEFT - ) - - def _build_menu(self): - # File Menu - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Tools']) - self._add_autofill_sheet(self._menus['Tools']) - self._add_font_size_menu(self._menus['Tools']) - self._add_font_family_menu(self._menus['Tools']) - self._add_themes_menu(self._menus['Tools']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False) - self._add_about(self._menus['Help']) - - # Build main menu - self.add_cascade(label='File', menu=self._menus['File']) - self.add_cascade(label='Tools', menu=self._menus['Tools']) - self._add_go_record_list(self) - self._add_go_new_record(self) - self.add_cascade(label='Help', menu=self._menus['Help']) - - -class LinuxMainMenu(GenericMainMenu): - """Differences for Linux: - - - Edit menu for autofill options - - View menu for font & theme options - - Use color theme for menu - """ - styles = { - 'background': '#333', - 'foreground': 'white', - 'activebackground': '#777', - 'activeforeground': 'white', - 'relief': tk.GROOVE - } - - - def _build_menu(self): - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The edit menu - self._menus['Edit'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - # The View menu - self._menus['View'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -class MacOsMainMenu(GenericMainMenu): - """ - Differences for MacOS: - - - Create App Menu - - Move about to app menu, remove 'help' - - Remove redundant quit command - - Change accelerators to Command-[] - - Add View menu for font & theme options - - Add Edit menu for autofill options - - Add Window menu for navigation commands - """ - keybinds = { - '': '<>', - '': '<>', - '': '<>' - } - accelerators = { - 'file_open': 'Cmd-O', - 'record_list': 'Cmd-L', - 'new_record': 'Cmd-R', - } - - def _add_about(self, menu): - menu.add_command( - label='About ABQ Data Entry', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - self._menus['ABQ Data Entry'] = tk.Menu( - self, tearoff=False, - name='apple' - ) - self._add_about(self._menus['ABQ Data Entry']) - self._menus['ABQ Data Entry'].add_separator() - - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - - self._menus['Edit'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - # View menu - self._menus['View'] = tk.Menu(self, tearoff=False) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # Window Menu - self._menus['Window'] = tk.Menu(self, name='window', tearoff=False) - self._add_go_record_list(self._menus['Window']) - self._add_go_new_record(self._menus['Window']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -def get_main_menu_for_os(os_name): - """Return the menu class appropriate to the given OS""" - menus = { - 'Linux': LinuxMainMenu, - 'Darwin': MacOsMainMenu, - 'freebsd7': LinuxMainMenu, - 'Windows': WindowsMainMenu - } - - return menus.get(os_name, GenericMainMenu) diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index b862989..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,346 +0,0 @@ -import csv -from pathlib import Path -import os -import json -import platform -from datetime import datetime - -import psycopg2 as pg -from psycopg2.extras import DictCursor - -from .constants import FieldTypes as FT - - -class SQLModel: - """Data Model for SQL data storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string_list, - 'values': []}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': []}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': []}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - lc_update_query = ( - 'UPDATE lab_checks SET lab_tech_id = ' - '(SELECT id FROM lab_techs WHERE name = %(Technician)s) ' - 'WHERE date=%(Date)s AND time=%(Time)s AND lab_id=%(Lab)s' - ) - - lc_insert_query = ( - 'INSERT INTO lab_checks VALUES (%(Date)s, %(Time)s, %(Lab)s, ' - '(SELECT id FROM lab_techs WHERE name LIKE %(Technician)s))' - ) - - pc_update_query = ( - 'UPDATE plot_checks SET date=%(Date)s, time=%(Time)s, ' - 'lab_id=%(Lab)s, plot=%(Plot)s, seed_sample = %(Seed Sample)s, ' - 'humidity = %(Humidity)s, light = %(Light)s, ' - 'temperature = %(Temperature)s, ' - 'equipment_fault = %(Equipment Fault)s, ' - 'blossoms = %(Blossoms)s, plants = %(Plants)s, ' - 'fruit = %(Fruit)s, max_height = %(Max Height)s, ' - 'min_height = %(Min Height)s, median_height = %(Med Height)s, ' - 'notes = %(Notes)s WHERE date=%(key_date)s AND time=%(key_time)s ' - 'AND lab_id=%(key_lab)s AND plot=%(key_plot)s') - - pc_insert_query = ( - 'INSERT INTO plot_checks VALUES (%(Date)s, %(Time)s, %(Lab)s,' - ' %(Plot)s, %(Seed Sample)s, %(Humidity)s, %(Light)s,' - ' %(Temperature)s, %(Equipment Fault)s, %(Blossoms)s, %(Plants)s,' - ' %(Fruit)s, %(Max Height)s, %(Min Height)s,' - ' %(Med Height)s, %(Notes)s)') - - def __init__(self, host, database, user, password): - self.connection = pg.connect(host=host, database=database, - user=user, password=password, cursor_factory=DictCursor) - - techs = self.query("SELECT name FROM lab_techs ORDER BY name") - labs = self.query("SELECT id FROM labs ORDER BY id") - plots = self.query("SELECT DISTINCT plot FROM plots ORDER BY plot") - self.fields['Technician']['values'] = [x['name'] for x in techs] - self.fields['Lab']['values'] = [x['id'] for x in labs] - self.fields['Plot']['values'] = [str(x['plot']) for x in plots] - - def query(self, query, parameters=None): - with self.connection: - with self.connection.cursor() as cursor: - cursor.execute(query, parameters) - # cursor.description is None when - # no rows are returned - if cursor.description is not None: - return cursor.fetchall() - - def get_all_records(self, all_dates=False): - """Return all records. - - By default, only return today's records, unless - all_dates is True. - """ - query = ('SELECT * FROM data_record_view ' - 'WHERE %(all_dates)s OR "Date" = CURRENT_DATE ' - 'ORDER BY "Date" DESC, "Time", "Lab", "Plot"') - return self.query(query, {'all_dates': all_dates}) - - def get_record(self, rowkey): - """Return a single record - - rowkey must be a tuple of date, time, lab, and plot - """ - date, time, lab, plot = rowkey - query = ( - 'SELECT * FROM data_record_view ' - 'WHERE "Date" = %(date)s AND "Time" = %(time)s ' - 'AND "Lab" = %(lab)s AND "Plot" = %(plot)s') - result = self.query( - query, - {"date": date, "time": time, "lab": lab, "plot": plot} - ) - return result[0] if result else dict() - - def save_record(self, record, rowkey): - """Save a record to the database - - rowkey must be a tuple of date, time, lab, and plot. - Or None if this is a new record. - """ - if rowkey: - key_date, key_time, key_lab, key_plot = rowkey - record.update({ - "key_date": key_date, - "key_time": key_time, - "key_lab": key_lab, - "key_plot": key_plot - }) - - # Lab check is based on the entered date/time/lab - if self.get_lab_check( - record['Date'], record['Time'], record['Lab'] - ): - lc_query = self.lc_update_query - else: - lc_query = self.lc_insert_query - # Plot check is based on the key values - if rowkey: - pc_query = self.pc_update_query - else: - pc_query = self.pc_insert_query - - self.query(lc_query, record) - self.query(pc_query, record) - - def get_lab_check(self, date, time, lab): - """Retrieve the lab check record for the given date, time, and lab""" - query = ('SELECT date, time, lab_id, lab_tech_id, ' - 'lt.name as lab_tech FROM lab_checks JOIN lab_techs lt ' - 'ON lab_checks.lab_tech_id = lt.id WHERE ' - 'lab_id = %(lab)s AND date = %(date)s AND time = %(time)s') - results = self.query( - query, {'date': date, 'time': time, 'lab': lab}) - return results[0] if results else dict() - - def get_current_seed_sample(self, lab, plot): - """Get the seed sample currently planted in the given lab and plot""" - result = self.query('SELECT current_seed_sample FROM plots ' - 'WHERE lab_id=%(lab)s AND plot=%(plot)s', - {'lab': lab, 'plot': plot}) - return result[0]['current_seed_sample'] if result else '' - - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data, rownum=None): - """Save a dict of data to the CSV file""" - - if rownum is None: - # This is a new record - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - else: - # This is an update - records = self.get_all_records() - records[rownum] = data - with open(self.file, 'w', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - csvwriter.writeheader() - csvwriter.writerows(records) - - def get_all_records(self): - """Read in all records from the CSV and return a list""" - if not self.file.exists(): - return [] - - with open(self.file, 'r', encoding='utf-8') as fh: - # Casting to list is necessary for unit tests to work - csvreader = csv.DictReader(list(fh.readlines())) - missing_fields = set(self.fields.keys()) - set(csvreader.fieldnames) - if len(missing_fields) > 0: - fields_string = ', '.join(missing_fields) - raise Exception( - f"File is missing fields: {fields_string}" - ) - records = list(csvreader) - - # Correct issue with boolean fields - trues = ('true', 'yes', '1') - bool_fields = [ - key for key, meta - in self.fields.items() - if meta['type'] == FT.boolean - ] - for record in records: - for key in bool_fields: - record[key] = record[key].lower() in trues - return records - - def get_record(self, rownum): - """Get a single record by row number - - Callling code should catch IndexError - in case of a bad rownum. - """ - - return self.get_all_records()[rownum] - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'}, - 'db_host': {'type': 'str', 'value': 'localhost'}, - 'db_name': {'type': 'str', 'value': 'abq'} - } - - config_dirs = { - "Linux": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - "freebsd7": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - 'Darwin': Path.home() / 'Library' / 'Application Support', - 'Windows': Path.home() / 'AppData' / 'Local' - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - filedir = self.config_dirs.get(platform.system(), Path.home()) - self.filepath = filedir / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - json_string = json.dumps(self.fields) - with open(self.filepath, 'w', encoding='utf-8') as fh: - fh.write(json_string) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.loads(fh.read()) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/test/__init__.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/test/test_application.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/test/test_application.py deleted file mode 100644 index 73cc7b4..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/test/test_application.py +++ /dev/null @@ -1,72 +0,0 @@ -from unittest import TestCase -from unittest.mock import patch -from .. import application - - -class TestApplication(TestCase): - records = [ - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '1', 'Seed Sample': 'AX477', - 'Humidity': '24.09', 'Light': '1.03', 'Temperature': '22.01', - 'Equipment Fault': False, 'Plants': '9', 'Blossoms': '21', - 'Fruit': '3', 'Max Height': '8.7', 'Med Height': '2.73', - 'Min Height': '1.67', 'Notes': '\n\n', - }, - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '2', 'Seed Sample': 'AX478', - 'Humidity': '24.47', 'Light': '1.01', 'Temperature': '21.44', - 'Equipment Fault': False, 'Plants': '14', 'Blossoms': '27', - 'Fruit': '1', 'Max Height': '9.2', 'Med Height': '5.09', - 'Min Height': '2.35', 'Notes': '' - } - ] - - settings = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'} - } - - def setUp(self): - # can be parenthesized in python 3.10+ - with \ - patch('abq_data_entry.application.m.CSVModel') as csvmodel,\ - patch('abq_data_entry.application.m.SettingsModel') as settingsmodel,\ - patch('abq_data_entry.application.Application._show_login') as show_login,\ - patch('abq_data_entry.application.v.DataRecordForm'),\ - patch('abq_data_entry.application.v.RecordList'),\ - patch('abq_data_entry.application.ttk.Notebook'),\ - patch('abq_data_entry.application.get_main_menu_for_os')\ - : - - settingsmodel().fields = self.settings - csvmodel().get_all_records.return_value = self.records - show_login.return_value = True - self.app = application.Application() - - def tearDown(self): - self.app.update() - self.app.destroy() - - def test_show_recordlist(self): - self.app._show_recordlist() - self.app.update() - self.app.notebook.select.assert_called_with(self.app.recordlist) - - def test_populate_recordlist(self): - # test correct functions - self.app._populate_recordlist() - self.app.model.get_all_records.assert_called() - self.app.recordlist.populate.assert_called_with(self.records) - - # test exceptions - - self.app.model.get_all_records.side_effect = Exception('Test message') - with patch('abq_data_entry.application.messagebox'): - self.app._populate_recordlist() - application.messagebox.showerror.assert_called_with( - title='Error', message='Problem reading file', - detail='Test message' - ) diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/test/test_models.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/test/test_models.py deleted file mode 100644 index 0cb1baf..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/test/test_models.py +++ /dev/null @@ -1,137 +0,0 @@ -from .. import models -from unittest import TestCase -from unittest import mock - -from pathlib import Path - -class TestCSVModel(TestCase): - - def setUp(self): - - self.file1_open = mock.mock_open( - read_data=( - "Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light," - "Temperature,Equipment Fault,Plants,Blossoms,Fruit,Min Height," - "Max Height,Med Height,Notes\r\n" - "2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,14," - "27,1,2.35,9.2,5.09,\r\n" - "2021-06-01,8:00,J Simms,A,3,AX479,24.15,1,20.82,False,18,49," - "6,2.47,14.2,11.83,\r\n")) - self.file2_open = mock.mock_open(read_data='') - - self.model1 = models.CSVModel('file1') - self.model2 = models.CSVModel('file2') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_all_records(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - records = self.model1.get_all_records() - - self.assertEqual(len(records), 2) - self.assertIsInstance(records, list) - self.assertIsInstance(records[0], dict) - - fields = ( - 'Date', 'Time', 'Technician', 'Lab', 'Plot', - 'Seed Sample', 'Humidity', 'Light', - 'Temperature', 'Equipment Fault', 'Plants', - 'Blossoms', 'Fruit', 'Min Height', 'Max Height', - 'Med Height', 'Notes') - - for field in fields: - self.assertIn(field, records[0].keys()) - - # testing boolean conversion - self.assertFalse(records[0]['Equipment Fault']) - - self.file1_open.assert_called_with( - Path('file1'), 'r', encoding='utf-8' - ) - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_record(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - record0 = self.model1.get_record(0) - record1 = self.model1.get_record(1) - - self.assertNotEqual(record0, record1) - self.assertEqual(record0['Date'], '2021-06-01') - self.assertEqual(record1['Plot'], '3') - self.assertEqual(record0['Med Height'], '5.09') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_save_record(self, mock_path_exists): - - record = { - "Date": '2021-07-01', "Time": '12:00', - "Technician": 'Test Technician', "Lab": 'E', - "Plot": '17', "Seed Sample": 'test sample', - "Humidity": '10', "Light": '99', - "Temperature": '20', "Equipment Fault": False, - "Plants": '10', "Blossoms": '200', - "Fruit": '250', "Min Height": '40', - "Max Height": '50', "Med Height": '55', - "Notes": 'Test Note\r\nTest Note\r\n' - } - record_as_csv = ( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - - # test appending a file - mock_path_exists.return_value = True - - # test insert - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - self.file2_open.assert_called_with( - Path('file2'), 'a', encoding='utf-8' - ) - file2_handle = self.file2_open() - file2_handle.write.assert_called_with(record_as_csv) - - # test update - with mock.patch('abq_data_entry.models.open', self.file1_open): - self.model1.save_record(record, 1) - self.file1_open.assert_called_with( - Path('file1'), 'w', encoding='utf-8' - ) - file1_handle = self.file1_open() - file1_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call( - '2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,' - '14,27,1,2.35,9.2,5.09,\r\n'), - mock.call( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - ]) - - # test new file - mock_path_exists.return_value = False - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - file2_handle = self.file2_open() - file2_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call(record_as_csv) - ]) - with self.assertRaises(IndexError): - self.model2.save_record(record, 2) diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py deleted file mode 100644 index e796eb8..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py +++ /dev/null @@ -1,219 +0,0 @@ -from .. import widgets -from unittest import TestCase -from unittest.mock import Mock -import tkinter as tk -from tkinter import ttk - - -class TkTestCase(TestCase): - """A test case designed for Tkinter widgets and views""" - - keysyms = { - '-': 'minus', - ' ': 'space', - ':': 'colon', - # For more see http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm - } - @classmethod - def setUpClass(cls): - cls.root = tk.Tk() - cls.root.wait_visibility() - - @classmethod - def tearDownClass(cls): - cls.root.update() - cls.root.destroy() - - def type_in_widget(self, widget, string): - widget.focus_force() - for char in string: - char = self.keysyms.get(char, char) - self.root.update() - widget.event_generate(''.format(char)) - self.root.update() - - def click_on_widget(self, widget, x, y, button=1): - widget.focus_force() - self.root.update() - widget.event_generate("".format(button), x=x, y=y) - self.root.update() - - -class TestValidatedMixin(TkTestCase): - - def setUp(self): - class TestClass(widgets.ValidatedMixin, ttk.Entry): - pass - self.vw1 = TestClass(self.root) - - def assertEndsWith(self, text, ending): - if not text.endswith(ending): - raise AssertionError( - "'{}' does not end with '{}'".format(text, ending) - ) - - def test_init(self): - - # check error var setup - self.assertIsInstance(self.vw1.error, tk.StringVar) - - # check validation config - self.assertEqual(self.vw1.cget('validate'), 'all') - self.assertEndsWith( - self.vw1.cget('validatecommand'), - '%P %s %S %V %i %d' - ) - self.assertEndsWith( - self.vw1.cget('invalidcommand'), - '%P %s %S %V %i %d' - ) - - def test__validate(self): - - # by default, _validate should return true - args = { - 'proposed': 'abc', - 'current': 'ab', - 'char': 'c', - 'event': 'key', - 'index': '2', - 'action': '1' - } - # test key validate routing - self.assertTrue( - self.vw1._validate(**args) - ) - fake_key_val = Mock(return_value=False) - self.vw1._key_validate = fake_key_val - self.assertFalse( - self.vw1._validate(**args) - ) - fake_key_val.assert_called_with(**args) - - # test focusout validate routing - args['event'] = 'focusout' - self.assertTrue(self.vw1._validate(**args)) - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - self.assertFalse(self.vw1._validate(**args)) - fake_focusout_val.assert_called_with(event='focusout') - - - def test_trigger_focusout_validation(self): - - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - fake_focusout_invalid = Mock() - self.vw1._focusout_invalid = fake_focusout_invalid - - val = self.vw1.trigger_focusout_validation() - self.assertFalse(val) - fake_focusout_val.assert_called_with(event='focusout') - fake_focusout_invalid.assert_called_with(event='focusout') - - -class TestValidatedSpinbox(TkTestCase): - - def setUp(self): - self.value = tk.DoubleVar() - self.vsb = widgets.ValidatedSpinbox( - self.root, - textvariable=self.value, - from_=-10, to=10, increment=1 - ) - self.vsb.pack() - self.vsb.wait_visibility() - - def tearDown(self): - self.vsb.destroy() - - def key_validate(self, new, current=''): - return self.vsb._key_validate( - new, # inserted char - 'end', # position to insert - current, # current value - current + new, # proposed value - '1' # action code (1 == insert) - ) - - def click_arrow(self, arrow='inc', times=1): - x = self.vsb.winfo_width() - 5 - y = 5 if arrow == 'inc' else 15 - for _ in range(times): - self.click_on_widget(self.vsb, x=x, y=y) - - def test__key_validate(self): - ################### - # Unit-test Style # - ################### - - # test valid input - for x in range(10): - x = str(x) - p_valid = self.vsb._key_validate(x, 'end', '', x, '1') - n_valid = self.vsb._key_validate(x, 'end', '-', '-' + x, '1') - self.assertTrue(p_valid) - self.assertTrue(n_valid) - - # test letters - valid = self.key_validate('a') - self.assertFalse(valid) - - # test non-increment number - valid = self.key_validate('1', '0.') - self.assertFalse(valid) - - # test too high number - valid = self.key_validate('0', '10') - self.assertFalse(valid) - - def test__key_validate_integration(self): - ########################## - # Integration test style # - ########################## - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '10') - self.assertEqual(self.vsb.get(), '10') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, 'abcdef') - self.assertEqual(self.vsb.get(), '') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '200') - self.assertEqual(self.vsb.get(), '2') - - def test__focusout_validate(self): - - # test valid - for x in range(10): - self.value.set(x) - posvalid = self.vsb._focusout_validate() - self.value.set(-x) - negvalid = self.vsb._focusout_validate() - - self.assertTrue(posvalid) - self.assertTrue(negvalid) - - # test too low - self.value.set('-200') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - # test invalid number - self.vsb.delete(0, 'end') - self.vsb.insert('end', '-a2-.3') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - def test_arrows(self): - self.value.set(0) - self.click_arrow(times=1) - self.assertEqual(self.vsb.get(), '1') - - self.click_arrow(times=5) - self.assertEqual(self.vsb.get(), '6') - - self.click_arrow(arrow='dec', times=1) - self.assertEqual(self.vsb.get(), '5') diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index feb634b..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,573 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT -from . import images - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, style='', cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - if style: - frame.configure(style=style) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # new for ch9 - style = ttk.Style() - - # Frame styles - style.configure( - 'RecordInfo.TLabelframe', - background='khaki', padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe', background='lightblue', - padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe', - background='lightgreen', padx=10, pady=10 - ) - # Style the label Element as well - style.configure( - 'RecordInfo.TLabelframe.Label', background='khaki', - padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe.Label', - background='lightblue', padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe.Label', - background='lightgreen', padx=10, pady=10 - ) - - # Style for the form labels and buttons - style.configure('RecordInfo.TLabel', background='khaki') - style.configure('RecordInfo.TRadiobutton', background='khaki') - style.configure('EnvironmentInfo.TLabel', background='lightblue') - style.configure( - 'EnvironmentInfo.TCheckbutton', - background='lightblue' - ) - style.configure('PlantInfo.TLabel', background='lightgreen') - - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # new chapter 8 - # variable to track current record id - self.current_record = None - - # Label for displaying what record we're editing - self.record_label = ttk.Label(self) - self.record_label.grid(row=0, column=0) - - # Record info section - r_info = self._add_frame( - "Record Information", 'RecordInfo.TLabelframe' - ) - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=1) - # swap order for chapter 12 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - label_args={'style': 'RecordInfo.TLabel'}, - input_args={'style': 'RecordInfo.TRadiobutton'} - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame( - "Environment Data", 'EnvironmentInfo.TLabelframe' - ) - - e_info = ttk.LabelFrame( - self, - text="Environment Data", - style='EnvironmentInfo.TLabelframe' - ) - e_info.grid(row=2, column=0, sticky="we") - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - disable_var=self._vars['Equipment Fault'], - var=self._vars['Temperature'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'}, - input_args={'style': 'EnvironmentInfo.TCheckbutton'} - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data", 'PlantInfo.TLabelframe') - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=2) - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={"max_var": max_height_var, - "focus_update_var": min_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={"min_var": min_height_var, - "focus_update_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={"min_var": min_height_var, - "max_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=2) - - - # Notes section -- Update grid row value for ch8 - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=4, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=5) - self.save_button_logo = tk.PhotoImage(file=images.SAVE_ICON) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save, - image=self.save_button_logo, compound=tk.LEFT - ) - self.savebutton.pack(side=tk.RIGHT) - - self.reset_button_logo = tk.PhotoImage(file=images.RESET_ICON) - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset, - image=self.reset_button_logo, compound=tk.LEFT - ) - self.resetbutton.pack(side=tk.RIGHT) - - # new for ch12 - # Triggers - for field in ('Lab', 'Plot'): - self._vars[field].trace_add( - 'write', self._populate_current_seed_sample) - - for field in ('Date', 'Time', 'Lab'): - self._vars[field].trace_add( - 'write', self._populate_tech_for_lab_check) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - # rewrite for ch12 - def load_record(self, rowkey, data=None): - """Load a record's data into the form""" - self.current_record = rowkey - if rowkey is None: - self.reset() - self.record_label.config(text='New Record') - else: - date, time, lab, plot = rowkey - title = f'Record for Lab {lab}, Plot {plot} at {date} {time}' - self.record_label.config(text=title) - for key, var in self._vars.items(): - var.set(data.get(key, '')) - try: - var.label_widget.input.trigger_focusout_validation() - except AttributeError: - pass - - # new for ch12 - - def _populate_current_seed_sample(self, *_): - """Auto-populate the current seed sample for Lab and Plot""" - if not self.settings['autofill sheet data'].get(): - return - plot = self._vars['Plot'].get() - lab = self._vars['Lab'].get() - - if plot and lab: - seed = self.model.get_current_seed_sample(lab, plot) - self._vars['Seed Sample'].set(seed) - - def _populate_tech_for_lab_check(self, *_): - """Populate technician based on the current lab check""" - if not self.settings['autofill sheet data'].get(): - return - date = self._vars['Date'].get() - try: - datetime.fromisoformat(date) - except ValueError: - return - time = self._vars['Time'].get() - lab = self._vars['Lab'].get() - - if all([date, time, lab]): - check = self.model.get_lab_check(date, time, lab) - tech = check['lab_tech'] if check else '' - self._vars['Technician'].set(tech) - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) - - -class RecordList(tk.Frame): - """Display for CSV file contents""" - - column_defs = { - '#0': {'label': 'Row', 'anchor': tk.W}, - 'Date': {'label': 'Date', 'width': 150, 'stretch': True}, - 'Time': {'label': 'Time'}, - 'Lab': {'label': 'Lab', 'width': 40}, - 'Plot': {'label': 'Plot', 'width': 80} - } - default_width = 100 - default_minwidth = 10 - default_anchor = tk.CENTER - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self._inserted = list() - self._updated = list() - self.columnconfigure(0, weight=1) - self.rowconfigure(0, weight=1) - - # create treeview - self.treeview = ttk.Treeview( - self, - columns=list(self.column_defs.keys())[1:], - selectmode='browse' - ) - self.treeview.grid(row=0, column=0, sticky='NSEW') - - # Configure treeview columns - for name, definition in self.column_defs.items(): - label = definition.get('label', '') - anchor = definition.get('anchor', self.default_anchor) - minwidth = definition.get('minwidth', self.default_minwidth) - width = definition.get('width', self.default_width) - stretch = definition.get('stretch', False) - self.treeview.heading(name, text=label, anchor=anchor) - self.treeview.column( - name, anchor=anchor, minwidth=minwidth, - width=width, stretch=stretch - ) - - self.treeview.bind('', self._on_open_record) - self.treeview.bind('', self._on_open_record) - - # configure scrollbar for the treeview - self.scrollbar = ttk.Scrollbar( - self, - orient=tk.VERTICAL, - command=self.treeview.yview - ) - self.treeview.configure(yscrollcommand=self.scrollbar.set) - self.scrollbar.grid(row=0, column=1, sticky='NSW') - - # configure tagging - self.treeview.tag_configure('inserted', background='lightgreen') - self.treeview.tag_configure('updated', background='lightblue') - - # For ch12, hide first column since row # is no longer meaningful - self.treeview.config(show='headings') - - # new for ch12 - - @staticmethod - def _rowkey_to_iid(rowkey): - """Convert a rowkey tuple to an IID string""" - return '{}|{}|{}|{}'.format(*rowkey) - - @staticmethod - def _iid_to_rowkey(iid): - """Convert an IID string to a rowkey tuple""" - return tuple(iid.split("|")) - - # update for ch12 - def populate(self, rows): - """Clear the treeview and write the supplied data rows to it.""" - - for row in self.treeview.get_children(): - self.treeview.delete(row) - - cids = list(self.column_defs.keys())[1:] - for rowdata in rows: - values = [rowdata[key] for key in cids] - rowkey = tuple([str(v) for v in values]) - if rowkey in self._inserted: - tag = 'inserted' - elif rowkey in self._updated: - tag = 'updated' - else: - tag = '' - iid = self._rowkey_to_iid(rowkey) - self.treeview.insert( - '', 'end', iid=iid, text=iid, values=values, tag=tag) - - if len(rows) > 0: - firstrow = self.treeview.identify_row(0) - self.treeview.focus_set() - self.treeview.selection_set(firstrow) - self.treeview.focus(firstrow) - - # update for ch12 - def _on_open_record(self, *_): - """Handle record open request""" - self.event_generate('<>') - - @property - def selected_id(self): - selection = self.treeview.selection() - return self._iid_to_rowkey(selection[0]) if selection else None - - - def add_updated_row(self, row): - if row not in self._updated: - self._updated.append(row) - - def add_inserted_row(self, row): - if row not in self._inserted: - self._inserted.append(row) - - def clear_tags(self): - self._inserted.clear() - self._updated.clear() diff --git a/Chapter12/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter12/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index ec72ed4..0000000 --- a/Chapter12/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,441 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - style = ttk.Style() - widget_class = self.winfo_class() - validated_style = 'ValidatedInput.' + widget_class - style.map( - validated_style, - foreground=[('invalid', 'white'), ('!invalid', 'black')], - fieldbackground=[('invalid', 'darkred'), ('!invalid', 'white')] - ) - self.configure(style=validated_style) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - pass - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.input.error = getattr(button, 'error', None) - self.input.trigger_focusout_validation = \ - button._focusout_validate - else: - self.input = input_class(self, **input_args) - - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - error_style = 'Error.' + label_args.get('style', 'TLabel') - ttk.Style().configure(error_style, foreground='darkred') - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error, style=error_style).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter12/ABQ_Data_Entry/docs/Application_layout.png b/Chapter12/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter12/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter12/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter12/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index fec5e84..0000000 --- a/Chapter12/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,97 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - - -Description ------------ -The program is being created to minimize data entry errors for laboratory measurements. - -Functionality Required ----------------------- - -The program must: - -* Provide a UI for reading, updating, and appending data to the CSV file -* allow all relevant, valid data to be entered, as per the field chart -* append entered data to a CSV file - - The CSV file must have a filename of abq_data_record_CURRENTDATE.csv, - where CURRENTDATE is the date of the checks in ISO format (Year-month-day) - - The CSV file must have all the fields as per the chart - -* enforce correct datatypes per field -* have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout -* prevent saving the record when errors are present - -The program should try, whenever possible, to: - -* enforce reasonable limits on data entered -* Auto-fill data -* Suggest likely correct values -* Provide a smooth and efficient workflow - -Functionality Not Required --------------------------- - -The program does not need to: - -* Allow deletion of data. - -Limitations ------------ - -The program must: - -* Be efficiently operable by keyboard-only users. -* Be accessible to color blind users. -* Run on Debian Linux. -* Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+----------+------+------------------+--------------------------+ -|Field | Datatype | Units| Range |Descripton | -+============+==========+======+==================+==========================+ -|Date |Date | | |Date of record | -+------------+----------+------+------------------+--------------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00 | | -+------------+----------+------+------------------+--------------------------+ -|Lab |String | | A - C |Lab ID | -+------------+----------+------+------------------+--------------------------+ -|Technician |String | | |Technician name | -+------------+----------+------+------------------+--------------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+----------+------+------------------+--------------------------+ -|Seed |String | | |Seed sample ID | -|sample | | | | | -+------------+----------+------+------------------+--------------------------+ -|Fault |Bool | | |Fault on environmental | -| | | | |sensor | -+------------+----------+------+------------------+--------------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -+------------+----------+------+------------------+--------------------------+ -|Humidity |Decimal |g/m³ | 0.5 - 52.0 |Abs humidity at plot | -+------------+----------+------+------------------+--------------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -+------------+----------+------+------------------+--------------------------+ -|Blossoms |Int | | 0 - 1000 |Number of blossoms in plot| -+------------+----------+------+------------------+--------------------------+ -|Fruit |Int | | 0 - 1000 |Number of fruits in plot | -+------------+----------+------+------------------+--------------------------+ -|Plants |Int | | 0 - 20 |Number of plants in plot | -+------------+----------+------+------------------+--------------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest plant in| -| | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest plant | -| | | | |in plot | -+------------+----------+------+------------------+--------------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of plants in| -|height | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+----------+------+------------------+--------------------------+ diff --git a/Chapter12/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter12/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter12/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter12/ABQ_Data_Entry/sql/create_db.sql b/Chapter12/ABQ_Data_Entry/sql/create_db.sql deleted file mode 100644 index 011389a..0000000 --- a/Chapter12/ABQ_Data_Entry/sql/create_db.sql +++ /dev/null @@ -1,82 +0,0 @@ --- Lab techs --- Use employee ID # as primary key --- Since names can change --- Names must be unique since they will be displayed --- In a dropdown -CREATE TABLE lab_techs ( - id SMALLINT PRIMARY KEY, - name VARCHAR(512) UNIQUE NOT NULL - ); - -CREATE TABLE labs ( - id CHAR(1) PRIMARY KEY - ); - -CREATE TABLE plots ( - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - current_seed_sample CHAR(6), - PRIMARY KEY(lab_id, plot), - CONSTRAINT valid_plot CHECK (plot BETWEEN 1 AND 20) - ); - -CREATE TABLE lab_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - lab_tech_id SMALLINT NOT NULL REFERENCES lab_techs(id), - PRIMARY KEY(date, time, lab_id) - ); - -CREATE TABLE plot_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - seed_sample CHAR(6) NOT NULL, - humidity NUMERIC(4, 2) CHECK (humidity BETWEEN 0.5 AND 52.0), - light NUMERIC(5, 2) CHECK (light BETWEEN 0 AND 100), - temperature NUMERIC(4, 2) CHECK (temperature BETWEEN 4 AND 40), - equipment_fault BOOLEAN NOT NULL, - blossoms SMALLINT NOT NULL CHECK (blossoms BETWEEN 0 AND 1000), - plants SMALLINT NOT NULL CHECK (plants BETWEEN 0 AND 20), - fruit SMALLINT NOT NULL CHECK (fruit BETWEEN 0 AND 1000), - max_height NUMERIC(6, 2) NOT NULL CHECK (max_height BETWEEN 0 AND 1000), - min_height NUMERIC(6, 2) NOT NULL CHECK (min_height BETWEEN 0 AND 1000), - median_height NUMERIC(6, 2) - NOT NULL CHECK - (median_height BETWEEN min_height AND max_height), - notes TEXT, - PRIMARY KEY(date, time, lab_id, plot), - FOREIGN KEY(lab_id, date, time) - REFERENCES lab_checks(lab_id, date, time), - FOREIGN KEY(lab_id, plot) REFERENCES plots(lab_id, plot) - ); - -DROP VIEW IF EXISTS data_record_view; -CREATE VIEW data_record_view AS ( - SELECT pc.date AS "Date", - to_char(pc.time, 'FMHH24:MI') AS "Time", - lt.name AS "Technician", - pc.lab_id AS "Lab", - pc.plot AS "Plot", - pc.seed_sample AS "Seed Sample", - pc.equipment_fault AS "Equipment Fault", - pc.humidity AS "Humidity", - pc.light AS "Light", - pc.temperature AS "Temperature", - pc.plants AS "Plants", - pc.blossoms AS "Blossoms", - pc.fruit AS "Fruit", - pc.max_height AS "Max Height", - pc.min_height AS "Min Height", - pc.median_height AS "Med Height", - pc.notes AS "Notes" - FROM plot_checks AS pc - JOIN lab_checks AS lc - ON pc.lab_id = lc.lab_id - AND pc.date = lc.date - AND pc.time = lc.time - JOIN lab_techs AS lt - ON lc.lab_tech_id = lt.id - ); diff --git a/Chapter12/ABQ_Data_Entry/sql/lookup_populate.sql b/Chapter12/ABQ_Data_Entry/sql/lookup_populate.sql deleted file mode 100644 index c95e763..0000000 --- a/Chapter12/ABQ_Data_Entry/sql/lookup_populate.sql +++ /dev/null @@ -1,20 +0,0 @@ -INSERT INTO lab_techs VALUES - (4291, 'J Simms'), - (4319, 'P Taylor'), - (4478, 'Q Murphy'), - (5607, 'L Taniff') - ; - -INSERT INTO labs VALUES - ('A'), ('B'), ('C'); - -INSERT INTO plots (SELECT labs.id, plotnums.plot -FROM labs, (SELECT generate_series(1, 20) plot) AS plotnums); - -UPDATE plots SET current_seed_sample= - (CASE WHEN plot % 4 = 1 THEN 'AXM477' - WHEN plot % 4 = 2 THEN 'AXM478' - WHEN plot % 4 = 3 THEN 'AXM479' - WHEN plot % 4 = 0 THEN 'AXM480' - ELSE '' END) -; diff --git a/Chapter12/create_sample_data.py b/Chapter12/create_sample_data.py deleted file mode 100644 index 1a2b2b8..0000000 --- a/Chapter12/create_sample_data.py +++ /dev/null @@ -1,92 +0,0 @@ -"""Script to populate lab checks and plot checks into abq database""" -import sys -from getpass import getpass -import random -import psycopg2 as pg - -host = input('Database host (localhost): ') or 'localhost' -database = input('Database name (abq): ') or 'abq' -user = input('Database user: ') -password = getpass('Database password: ') - -try: - cx = pg.connect( - host=host, - database=database, - user=user, - password=password - ) -except pg.OperationalError as e: - print('Connection failed') - print(e) - sys.exit() - - -lab_check_insert = """ -INSERT INTO lab_checks (date, time, lab_id, lab_tech_id) -VALUES (CURRENT_DATE, %(time)s, %(lab_id)s, (SELECT id from lab_techs ORDER BY RANDOM() limit 1)) -""" - -plot_check_insert = """ -INSERT INTO plot_checks ( - date, time, lab_id, plot, seed_sample, humidity, light, temperature, - equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, - notes -) -VALUES ( - CURRENT_DATE, %(time)s, %(lab_id)s, %(plot)s, - (SELECT current_seed_sample FROM plots WHERE plot=%(plot)s and lab_id = %(lab_id)s), - %(humidity)s, %(light)s, %(temperature)s, - %(equipment_fault)s, %(blossoms)s, %(plants)s, %(fruit)s, - %(max_height)s, %(min_height)s, %(median_height)s, %(notes)s -) -""" - -cursor = cx.cursor() - -for lab in ('A', 'B', 'C'): - plants = random.randint(0, 10) - blossoms = int(random.random() * 5 * plants) - fruit = int(random.random() * 5 * plants) - min_height = random.random() * 20 - max_height = random.random() * 10 + min_height - for time in ('8:00', '12:00', '16:00', '20:00'): - lc_data = { - 'time': time, - 'lab_id': lab, - } - plants = min(20, plants + random.choice([0, 0, 0, 0, 0, 0, 1])) - blossoms += random.choice([0, 0, 0, 0, 0, 0, 1]) - fruit += random.choice([0, 0, 0, 0, 0, 0, 1]) - min_height += random.random() * .5 - max_height += random.random() * .5 - med_height = min_height + (random.random() * (max_height - min_height)) - cursor.execute(lab_check_insert, lc_data) - for plot in range(1, 21): - e_fault = random.randint(1, 10) > 9 # 10% chance of failure - humidity = (random.random() * 4 + 21) if not e_fault else None - light = (random.random() * .1 + .95) if not e_fault else None - temperature = ((light ** 3) * 8 + 21) if light and not e_fault else None - - notes = random.choice([ - 'Check Hydration system', 'Dry leaves', 'Roots exposed', - 'Check delayed', 'Skylight obscured' - ]) if random.randint(1, 10) > 9 else '' - pc_data = { - 'time': time, - 'lab_id': lab, - 'plot': plot, - 'equipment_fault': e_fault, - 'light': light, - 'humidity': humidity, - 'temperature': temperature, - 'plants': plants, - 'blossoms': blossoms, - 'fruit': fruit, - 'max_height': max_height, - 'min_height': min_height, - 'median_height': med_height, - 'notes': notes - } - cursor.execute(plot_check_insert, pc_data) -cx.commit() diff --git a/Chapter12/psycopg2_demo.py b/Chapter12/psycopg2_demo.py deleted file mode 100644 index 7f7d01b..0000000 --- a/Chapter12/psycopg2_demo.py +++ /dev/null @@ -1,67 +0,0 @@ -import psycopg2 as pg -from psycopg2.extras import DictCursor -from getpass import getpass - -############## -# Connecting # -############## - -cx = pg.connect( - host='localhost', database='abq', - user=input('Username: '), - password=getpass('Password: '), - cursor_factory=DictCursor -) - -cur = cx.cursor() - -##################### -# Executing Queries # -##################### - -cur.execute(""" - CREATE TABLE test - (id SERIAL PRIMARY KEY, val TEXT) -""") -cur.execute(""" - INSERT INTO test (val) - VALUES ('Banana'), ('Orange'), ('Apple'); -""") - -################### -# Retrieving Data # -################### - -cur.execute("SELECT * FROM test") -num_rows = cur.rowcount -data = cur.fetchall() - -print(f'Got {num_rows} rows from database:') -#print(data) -for row in data: - # DictCursor rows can use string indexes - print(row['val']) - -######################### -# Parameterized Queries # -######################### - -new_item = input('Enter new item: ') - -#Never do this: -#cur.execute(f"INSERT INTO test (val) VALUES ('{new_item}')") -cur.execute("INSERT INTO test (val) VALUES (%s)", (new_item,)) -# or: -# cur.execute("INSERT INTO test (val) VALUES (%(item)s)", {'item': new_item}) -cur.execute('SELECT * FROM test') -print(cur.fetchall()) - -############### -# Cleaning Up # -############### - -# Call this to actually save the data before leaving -# cx.commit() - -# This is usually not necessary, but you can do it if you wish. -#cx.close() diff --git a/Chapter13/ABQ_Data_Entry/.gitignore b/Chapter13/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter13/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter13/ABQ_Data_Entry/README.rst b/Chapter13/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter13/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry.py b/Chapter13/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/#application.py# b/Chapter13/ABQ_Data_Entry/abq_data_entry/#application.py# deleted file mode 100644 index 9c8836d..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/#application.py# +++ /dev/null @@ -1,377 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog -from tkinter import font -import platform - -from . import views as v -from . import models as m -from .mainmenu import get_main_menu_for_os -from . import images -from . import network as n - - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # move here for ch12 because we need some settings data to authenticate - self.settings_model = m.SettingsModel() - self._load_settings() - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - self.deiconify() - - # Create model - # remove for ch12 - # self.model = m.CSVModel() - - self.inserted_rows = [] - self.updated_rows = [] - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Set taskbar icon - self.taskbar_icon = tk.PhotoImage(file=images.ABQ_LOGO_64) - self.call('wm', 'iconphoto', self._w, self.taskbar_icon) - - # Create the menu - #menu = MainMenu(self, self.settings) - menu_class = get_main_menu_for_os(platform.system()) - menu = menu_class(self, self.settings) - - self.config(menu=menu) - event_callbacks = { - '<>': lambda _: self.quit(), - '<>': self._show_recordlist, - '<>': self._new_record, - '<>': self._update_weather_data, - '<>': self._upload_to_corporate_rest, - '<>': self._upload_to_corporate_ftp, - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - # new for ch9 - self.logo = tk.PhotoImage(file=images.ABQ_LOGO_32) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16), - image=self.logo, - compound=tk.LEFT - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform_icon = tk.PhotoImage(file=images.FORM_ICON) - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.notebook.add( - self.recordform, text='Entry Form', - image=self.recordform_icon, compound=tk.LEFT - ) - self.recordform.bind('<>', self._on_save) - - - # The data record list - self.recordlist_icon = tk.PhotoImage(file=images.LIST_ICON) - self.recordlist = v.RecordList( - self, self.inserted_rows, self.updated_rows - ) - self.notebook.insert( - 0, self.recordlist, text='Records', - image=self.recordlist_icon, compound=tk.LEFT - ) - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rowkey = self.recordform.current_record - self.model.save_record(data, rowkey) - if rowkey is not None: - self.updated_rows.append(rowkey) - else: - rowkey = (data['Date'], data['Time'], data['Lab'], data['Plot']) - self.inserted_rows.append(rowkey) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - -# Remove for ch12 -# def _on_file_select(self, *_): -# """Handle the file->select action""" -# -# filename = filedialog.asksaveasfilename( -# title='Select the target file for saving records', -# defaultextension='.csv', -# filetypes=[('CSV', '*.csv *.CSV')] -# ) -# if filename: -# self.model = m.CSVModel(filename=filename) -# self.inserted_rows.clear() -# self.updated_rows.clear() -# self._populate_recordlist() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - # new ch12 - def _database_login(self, username, password): - """Try to login to the database and create self.data_model""" - db_host = self.settings['db_host'].get() - db_name = self.settings['db_name'].get() - try: - self.model = m.SQLModel( - db_host, db_name, username, password) - except m.pg.OperationalError as e: - print(e) - return False - return True - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._database_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - # update font settings after loading them - self._set_font() - self.settings['font size'].trace_add('write', self._set_font) - self.settings['font family'].trace_add('write', self._set_font) - - # process theme - style = ttk.Style() - theme = self.settings.get('theme').get() - if theme in style.theme_names(): - style.theme_use(theme) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None, None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the Record selected recordlist id in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - return - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) - - # new chapter 9 - def _set_font(self, *_): - """Set the application's font""" - font_size = self.settings['font size'].get() - font_family = self.settings['font family'].get() - font_names = ('TkDefaultFont', 'TkMenuFont', 'TkTextFont') - for font_name in font_names: - tk_font = font.nametofont(font_name) - tk_font.config(size=font_size, family=font_family) - - # new chapter 13 - def _update_weather_data(self, *_): - """Initiate retrieval and storage of weather data""" - try: - weather_data = n.get_local_weather( - self.settings['weather_station'].get() - ) - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem retrieving weather data', - detail=str(e) - ) - self.status.set('Problem retrieving weather data') - else: - self.model.add_weather_data(weather_data) - time = weather_data['observation_time_rfc822'] - self.status.set(f"Weather data recorded for {time}") - - def _create_csv_extract(self): - csvmodel = m.CSVModel() - records = self.model.get_all_records() - if not records: - return None - for record in records: - csvmodel.save_record(record) - return csvmodel.file - - def _upload_to_corporate_ftp(self, *_): - - csvfile = self._create_csv_extract() - d = v.LoginDialog(self, 'Login to ABQ Corporate FTP') - if d.result is None: - return - username, password = d.result - host = self.settings['abq_ftp_host'].get() - port = self.settings['abq_ftp_port'].get() - try: - n.upload_to_corporate_ftp( - csvfile, host, port, username, password - ) - except n.ftp.all_errors as e: - messagebox.showerror('Error Uploading File.', str(e)) - return - try: - files = n.get_corporate_ftp_files( - host, port, username, password - ) - except n.ftp.all_errors as e: - messagebox.showerror( - 'Error listing Files (file uploaded OK)', - str(e) - ) - return - filestring = '\n'.join(f'* {f}' for f in files) - messagebox.showinfo( - 'Success', f'{csvfile} successfully uploaded to FTP \n\n' - f'Current files on the server are: \n\n {filestring}' - ) - - def _upload_to_corporate_rest(self, *_): - csvfile = self._create_csv_extract() - if csvfile is None: - messagebox.showwarning( - title='No records', - message='There are no records to upload' - ) - return - d = v.LoginDialog( - self, 'Login to ABQ Corporate REST API' - ) - if d.result is not None: - username, password = d.result - else: - return - try: - n.upload_to_corporate_rest( - csvfile, - self.settings['abq_upload_url'].get(), - self.settings['abq_auth_url'].get(), - username, - password - ) - except n.requests.ConnectionError as e: - messagebox.showerror('Error connecting', str(e)) - except Exception as e: - messagebox.showerror('General Exception', str(e)) - else: - messagebox.showinfo( - 'Success', - f'{csvfile} successfully uploaded to REST API.' - ) diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index 19abbdb..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,468 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog -from tkinter import font -import platform - -from . import views as v -from . import models as m -from .mainmenu import get_main_menu_for_os -from . import images - - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # move here for ch12 because we need some settings data to authenticate - self.settings_model = m.SettingsModel() - self._load_settings() - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - self.deiconify() - - # Create model - # remove for ch12 - # self.model = m.CSVModel() - - self.inserted_rows = [] - self.updated_rows = [] - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Set taskbar icon - self.taskbar_icon = tk.PhotoImage(file=images.ABQ_LOGO_64) - self.call('wm', 'iconphoto', self._w, self.taskbar_icon) - - # Create the menu - #menu = MainMenu(self, self.settings) - menu_class = get_main_menu_for_os(platform.system()) - menu = menu_class(self, self.settings) - - self.config(menu=menu) - event_callbacks = { - '<>': lambda _: self.quit(), - '<>': self._show_recordlist, - '<>': self._new_record, - '<>': self._update_weather_data, - '<>': self._upload_to_corporate_rest, - '<>': self._upload_to_corporate_sftp, - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - # new for ch9 - self.logo = tk.PhotoImage(file=images.ABQ_LOGO_32) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16), - image=self.logo, - compound=tk.LEFT - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform_icon = tk.PhotoImage(file=images.FORM_ICON) - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.notebook.add( - self.recordform, text='Entry Form', - image=self.recordform_icon, compound=tk.LEFT - ) - self.recordform.bind('<>', self._on_save) - - - # The data record list - self.recordlist_icon = tk.PhotoImage(file=images.LIST_ICON) - self.recordlist = v.RecordList( - self, self.inserted_rows, self.updated_rows - ) - self.notebook.insert( - 0, self.recordlist, text='Records', - image=self.recordlist_icon, compound=tk.LEFT - ) - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rowkey = self.recordform.current_record - self.model.save_record(data, rowkey) - if rowkey is not None: - self.updated_rows.append(rowkey) - else: - rowkey = (data['Date'], data['Time'], data['Lab'], data['Plot']) - self.inserted_rows.append(rowkey) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - -# Remove for ch12 -# def _on_file_select(self, *_): -# """Handle the file->select action""" -# -# filename = filedialog.asksaveasfilename( -# title='Select the target file for saving records', -# defaultextension='.csv', -# filetypes=[('CSV', '*.csv *.CSV')] -# ) -# if filename: -# self.model = m.CSVModel(filename=filename) -# self.inserted_rows.clear() -# self.updated_rows.clear() -# self._populate_recordlist() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - # new ch12 - def _database_login(self, username, password): - """Try to login to the database and create self.data_model""" - db_host = self.settings['db_host'].get() - db_name = self.settings['db_name'].get() - try: - self.model = m.SQLModel( - db_host, db_name, username, password) - except m.pg.OperationalError as e: - print(e) - return False - return True - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._database_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - # update font settings after loading them - self._set_font() - self.settings['font size'].trace_add('write', self._set_font) - self.settings['font family'].trace_add('write', self._set_font) - - # process theme - style = ttk.Style() - theme = self.settings.get('theme').get() - if theme in style.theme_names(): - style.theme_use(theme) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None, None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the Record selected recordlist id in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - return - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) - - # new chapter 9 - def _set_font(self, *_): - """Set the application's font""" - font_size = self.settings['font size'].get() - font_family = self.settings['font family'].get() - font_names = ('TkDefaultFont', 'TkMenuFont', 'TkTextFont') - for font_name in font_names: - tk_font = font.nametofont(font_name) - tk_font.config(size=font_size, family=font_family) - - # new chapter 13 - def _update_weather_data(self, *_): - """Initiate retrieval and storage of weather data""" - weather_data_model = m.WeatherDataModel( - self.settings['weather_station'].get() - ) - try: - weather_data = weather_data_model.get_weather_data() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem retrieving weather data', - detail=str(e) - ) - self.status.set('Problem retrieving weather data') - else: - self.model.add_weather_data(weather_data) - time = weather_data['observation_time_rfc822'] - self.status.set(f"Weather data recorded for {time}") - - def _create_csv_extract(self): - csvmodel = m.CSVModel() - records = self.model.get_all_records() - if not records: - raise Exception('No records were found to build a CSV file.') - for record in records: - csvmodel.save_record(record) - return csvmodel.file - - - def _upload_to_corporate_sftp(self, *_): - - # create csv file - try: - csvfile = self._create_csv_extract() - except Exception as e: - messagebox.showwarning( - title='Error', message=str(e) - ) - return - - # authenticate - d = v.LoginDialog(self, 'Login to ABQ Corporate SFTP') - if d.result is None: - return - username, password = d.result - - # create model - host = self.settings['abq_sftp_host'].get() - port = self.settings['abq_sftp_port'].get() - sftp_model = m.SFTPModel(host, port) - try: - sftp_model.authenticate(username, password) - except Exception as e: - messagebox.showerror('Error Authenticating', str(e)) - return - - # check destination file - destination_dir = self.settings['abq_sftp_path'].get() - destination_path = f'{destination_dir}/{csvfile.name}' - - try: - exists = sftp_model.check_file(destination_path) - except Exception as e: - messagebox.showerror( - f'Error checking file {destination_path}', - str(e) - ) - return - if exists: - # ask if we should overwrite - overwrite = messagebox.askyesno( - 'File exists', - f'The file {destination_path} already exists on the server, ' - 'do you want to overwrite it?' - ) - if not overwrite: - # ask if we should download it - download = messagebox.askyesno( - 'Download file', - 'Do you want to download the file to inspect it?' - ) - if download: - # get a destination filename and save - filename = filedialog.asksaveasfilename() - if not filename: - return - try: - sftp_model.get_file(destination_path, filename) - except Exception as e: - messagebox.showerror('Error downloading', str(e)) - return - messagebox.showinfo( - 'Download Complete', 'Download Complete.' - ) - return - # if we haven't returned, the user wants to upload - try: - sftp_model.upload_file(csvfile, destination_path) - except Exception as e: - messagebox.showerror('Error uploading', str(e)) - else: - messagebox.showinfo( - 'Success', - f'{csvfile} successfully uploaded to SFTP server.' - ) - - - def _upload_to_corporate_rest(self, *_): - - # create csv file - try: - csvfile = self._create_csv_extract() - except Exception as e: - messagebox.showwarning( - title='Error', message=str(e) - ) - return - - # Authenticate to the rest server - d = v.LoginDialog( - self, 'Login to ABQ Corporate REST API' - ) - if d.result is not None: - username, password = d.result - else: - return - - # create REST model - rest_model = m.CorporateRestModel( - self.settings['abq_rest_url'].get() - ) - try: - rest_model.authenticate(username, password) - except Exception as e: - messagebox.showerror('Error authenticating', str(e)) - return - - # Check if the file exists - try: - exists = rest_model.check_file(csvfile.name) - except Exception as e: - messagebox.showerror('Error checking for file', str(e)) - return - - if exists: - # ask if we should overwrite - overwrite = messagebox.askyesno( - 'File exists', - f'The file {csvfile.name} already exists on the server, ' - 'do you want to overwrite it?' - ) - if not overwrite: - # ask if we should download it - download = messagebox.askyesno( - 'Download file', - 'Do you want to download the file to inspect it?' - ) - if download: - # get a destination filename and save - filename = filedialog.asksaveasfilename() - if not filename: - return - try: - data = rest_model.get_file(csvfile.name) - except Exception as e: - messagebox.showerror('Error downloading', str(e)) - return - with open(filename, 'w', encoding='utf-8') as fh: - fh.write(data) - messagebox.showinfo( - 'Download Complete', 'Download Complete.' - ) - return - # if we haven't returned, the user wants to upload - try: - rest_model.upload_file(csvfile) - except Exception as e: - messagebox.showerror('Error uploading', str(e)) - else: - messagebox.showinfo( - 'Success', - f'{csvfile} successfully uploaded to REST API.' - ) diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/__init__.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/__init__.py deleted file mode 100644 index 57538d9..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from pathlib import Path - -# This gives us the parent directory of this file (__init__.py) -IMAGE_DIRECTORY = Path(__file__).parent - -ABQ_LOGO_16 = IMAGE_DIRECTORY / 'abq_logo-16x10.png' -ABQ_LOGO_32 = IMAGE_DIRECTORY / 'abq_logo-32x20.png' -ABQ_LOGO_64 = IMAGE_DIRECTORY / 'abq_logo-64x40.png' - -# PNG icons - -SAVE_ICON = IMAGE_DIRECTORY / 'file-2x.png' -RESET_ICON = IMAGE_DIRECTORY / 'reload-2x.png' -LIST_ICON = IMAGE_DIRECTORY / 'list-2x.png' -FORM_ICON = IMAGE_DIRECTORY / 'browser-2x.png' - - -# BMP icons -QUIT_BMP = IMAGE_DIRECTORY / 'x-2x.xbm' -ABOUT_BMP = IMAGE_DIRECTORY / 'question-mark-2x.xbm' diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png deleted file mode 100644 index 255f273..0000000 Binary files a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png and /dev/null differ diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png deleted file mode 100644 index 650add1..0000000 Binary files a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png and /dev/null differ diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png deleted file mode 100644 index be9458f..0000000 Binary files a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png and /dev/null differ diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png deleted file mode 100644 index 2a6efb0..0000000 Binary files a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png and /dev/null differ diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/file-2x.png b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/file-2x.png deleted file mode 100644 index 4196c44..0000000 Binary files a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/file-2x.png and /dev/null differ diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/list-2x.png b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/list-2x.png deleted file mode 100644 index 1fc4450..0000000 Binary files a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/list-2x.png and /dev/null differ diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm deleted file mode 100644 index 8981c9b..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define question_mark_2x_width 16 -#define question_mark_2x_height 16 -static unsigned char question_mark_2x_bits[] = { - 0xc0, 0x0f, 0xe0, 0x1f, 0x70, 0x38, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x18, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03 }; diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png deleted file mode 100644 index 2a79f16..0000000 Binary files a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png and /dev/null differ diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm b/Chapter13/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm deleted file mode 100644 index 940af96..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define x_2x_width 16 -#define x_2x_height 16 -static unsigned char x_2x_bits[] = { - 0x04, 0x10, 0x0e, 0x38, 0x1f, 0x7c, 0x3e, 0x7e, 0x7c, 0x3f, 0xf8, 0x1f, - 0xf0, 0x0f, 0xe0, 0x07, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0x7e, 0x3e, - 0x3f, 0x7c, 0x1e, 0x78, 0x0c, 0x30, 0x00, 0x00 }; diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index 116277d..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,401 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import font - -from . import images - -class GenericMainMenu(tk.Menu): - """The Application's main menu""" - - accelerators = { - 'file_open': 'Ctrl+O', - 'quit': 'Ctrl+Q', - 'record_list': 'Ctrl+L', - 'new_record': 'Ctrl+R', - } - - keybinds = { - '': '<>', - '': '<>', - '': '<>', - '': '<>' - } - - styles = {} - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def _create_icons(self): - - # must be done in a method because PhotoImage can't be created - # until there is a Tk instance. - # There isn't one when the class is defined, but there is when - # the instance is created. - self.icons = { - # 'file_open': tk.PhotoImage(file=images.SAVE_ICON), - 'record_list': tk.PhotoImage(file=images.LIST_ICON), - 'new_record': tk.PhotoImage(file=images.FORM_ICON), - 'quit': tk.BitmapImage(file=images.QUIT_BMP, foreground='red'), - 'about': tk.BitmapImage( - file=images.ABOUT_BMP, foreground='#CC0', background='#A09' - ), - } - - def _add_file_open(self, menu): - - menu.add_command( - label='Select file…', command=self._event('<>'), - image=self.icons.get('file'), compound=tk.LEFT - ) - - def _add_quit(self, menu): - menu.add_command( - label='Quit', command=self._event('<>'), - image=self.icons.get('quit'), compound=tk.LEFT - ) - - def _add_weather_download(self, menu): - menu.add_command( - label="Update Weather Data", - command=self._event('<>'), - ) - - def _add_rest_upload(self, menu): - menu.add_command( - label="Upload CSV to corporate REST", - command=self._event('<>'), - ) - - def _add_sftp_upload(self, menu): - menu.add_command( - label="Upload CSV to corporate SFTP", - command=self._event('<>'), - ) - - def _add_autofill_date(self, menu): - menu.add_checkbutton( - label='Autofill Date', variable=self.settings['autofill date'] - ) - - def _add_autofill_sheet(self, menu): - menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - def _add_font_size_menu(self, menu): - font_size_menu = tk.Menu(self, tearoff=False, **self.styles) - for size in range(6, 17, 1): - font_size_menu.add_radiobutton( - label=size, value=size, - variable=self.settings['font size'] - ) - menu.add_cascade(label='Font size', menu=font_size_menu) - - def _add_font_family_menu(self, menu): - font_family_menu = tk.Menu(self, tearoff=False, **self.styles) - for family in font.families(): - font_family_menu.add_radiobutton( - label=family, value=family, - variable=self.settings['font family'] - ) - menu.add_cascade(label='Font family', menu=font_family_menu) - - def _add_themes_menu(self, menu): - style = ttk.Style() - themes_menu = tk.Menu(self, tearoff=False, **self.styles) - for theme in style.theme_names(): - themes_menu.add_radiobutton( - label=theme, value=theme, - variable=self.settings['theme'] - ) - menu.add_cascade(label='Theme', menu=themes_menu) - self.settings['theme'].trace_add('write', self._on_theme_change) - - def _add_go_record_list(self, menu): - menu.add_command( - label="Record List", command=self._event('<>'), - image=self.icons.get('record_list'), compound=tk.LEFT - ) - - def _add_go_new_record(self, menu): - menu.add_command( - label="New Record", command=self._event('<>'), - image=self.icons.get('new_record'), compound=tk.LEFT - ) - - def _add_about(self, menu): - menu.add_command( - label='About…', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - # The file menu - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) - #self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - - # The options menu - self._menus['Options'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Options']) - self._add_autofill_sheet(self._menus['Options']) - self._add_font_size_menu(self._menus['Options']) - self._add_font_family_menu(self._menus['Options']) - self._add_themes_menu(self._menus['Options']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self.add_cascade(label='Help', menu=self._menus['Help']) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - self.configure(**self.styles) - - def __init__(self, parent, settings, **kwargs): - super().__init__(parent, **kwargs) - self.settings = settings - self._create_icons() - self._menus = dict() - self._build_menu() - self._bind_accelerators() - self.configure(**self.styles) - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo( - title='About', message=about_message, detail=about_detail - ) - @staticmethod - def _on_theme_change(*_): - """Popup a message about theme changes""" - message = "Change requires restart" - detail = ( - "Theme changes do not take effect" - " until application restart" - ) - messagebox.showwarning( - title='Warning', - message=message, - detail=detail - ) - - def _bind_accelerators(self): - - for key, sequence in self.keybinds.items(): - self.bind_all(key, self._event(sequence)) - -class WindowsMainMenu(GenericMainMenu): - """ - Changes: - - Windows uses file->exit instead of file->quit, - and no accelerator is used. - - Windows can handle commands on the menubar, so - put 'Record List' / 'New Record' on the bar - - Windows can't handle icons on the menu bar, though - - Put 'options' under 'Tools' with separator - """ - - def _create_icons(self): - super()._create_icons() - del(self.icons['new_record']) - del(self.icons['record_list']) - - def __init__(self, *args, **kwargs): - del(self.keybinds['']) - super().__init__(*args, **kwargs) - - def _add_quit(self, menu): - menu.add_command( - label='Exit', - command=self._event('<>'), - image=self.icons.get('quit'), - compound=tk.LEFT - ) - - def _build_menu(self): - # File Menu - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Tools']) - self._add_autofill_sheet(self._menus['Tools']) - self._add_font_size_menu(self._menus['Tools']) - self._add_font_family_menu(self._menus['Tools']) - self._add_themes_menu(self._menus['Tools']) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False) - self._add_about(self._menus['Help']) - - # Build main menu - self.add_cascade(label='File', menu=self._menus['File']) - self.add_cascade(label='Tools', menu=self._menus['Tools']) - self._add_go_record_list(self) - self._add_go_new_record(self) - self.add_cascade(label='Help', menu=self._menus['Help']) - - -class LinuxMainMenu(GenericMainMenu): - """Differences for Linux: - - - Edit menu for autofill options - - View menu for font & theme options - - Use color theme for menu - """ - styles = { - 'background': '#333', - 'foreground': 'white', - 'activebackground': '#777', - 'activeforeground': 'white', - 'relief': tk.GROOVE - } - - - def _build_menu(self): - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The edit menu - self._menus['Edit'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - - # The View menu - self._menus['View'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -class MacOsMainMenu(GenericMainMenu): - """ - Differences for MacOS: - - - Create App Menu - - Move about to app menu, remove 'help' - - Remove redundant quit command - - Change accelerators to Command-[] - - Add View menu for font & theme options - - Add Edit menu for autofill options - - Add Window menu for navigation commands - """ - keybinds = { - '': '<>', - '': '<>', - '': '<>' - } - accelerators = { - 'file_open': 'Cmd-O', - 'record_list': 'Cmd-L', - 'new_record': 'Cmd-R', - } - - def _add_about(self, menu): - menu.add_command( - label='About ABQ Data Entry', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - self._menus['ABQ Data Entry'] = tk.Menu( - self, tearoff=False, - name='apple' - ) - self._add_about(self._menus['ABQ Data Entry']) - self._menus['ABQ Data Entry'].add_separator() - - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - - self._menus['Edit'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - - # View menu - self._menus['View'] = tk.Menu(self, tearoff=False) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # Window Menu - self._menus['Window'] = tk.Menu(self, name='window', tearoff=False) - self._add_go_record_list(self._menus['Window']) - self._add_go_new_record(self._menus['Window']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -def get_main_menu_for_os(os_name): - """Return the menu class appropriate to the given OS""" - menus = { - 'Linux': LinuxMainMenu, - 'Darwin': MacOsMainMenu, - 'freebsd7': LinuxMainMenu, - 'Windows': WindowsMainMenu - } - - return menus.get(os_name, GenericMainMenu) diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index 3021167..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,513 +0,0 @@ -import csv -from pathlib import Path -import os -import json -import platform -from datetime import datetime -from urllib.request import urlopen -from xml.etree import ElementTree -import requests -import paramiko - -import psycopg2 as pg -from psycopg2.extras import DictCursor - -from .constants import FieldTypes as FT - - -class SQLModel: - """Data Model for SQL data storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string_list, - 'values': []}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': []}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': []}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - lc_update_query = ( - 'UPDATE lab_checks SET lab_tech_id = ' - '(SELECT id FROM lab_techs WHERE name = %(Technician)s) ' - 'WHERE date=%(Date)s AND time=%(Time)s AND lab_id=%(Lab)s' - ) - - lc_insert_query = ( - 'INSERT INTO lab_checks VALUES (%(Date)s, %(Time)s, %(Lab)s, ' - '(SELECT id FROM lab_techs WHERE name LIKE %(Technician)s))' - ) - - pc_update_query = ( - 'UPDATE plot_checks SET date=%(Date)s, time=%(Time)s, ' - 'lab_id=%(Lab)s, plot=%(Plot)s, seed_sample = %(Seed Sample)s, ' - 'humidity = %(Humidity)s, light = %(Light)s, ' - 'temperature = %(Temperature)s, ' - 'equipment_fault = %(Equipment Fault)s, ' - 'blossoms = %(Blossoms)s, plants = %(Plants)s, ' - 'fruit = %(Fruit)s, max_height = %(Max Height)s, ' - 'min_height = %(Min Height)s, median_height = %(Med Height)s, ' - 'notes = %(Notes)s WHERE date=%(key_date)s AND time=%(key_time)s ' - 'AND lab_id=%(key_lab)s AND plot=%(key_plot)s') - - pc_insert_query = ( - 'INSERT INTO plot_checks VALUES (%(Date)s, %(Time)s, %(Lab)s,' - ' %(Plot)s, %(Seed Sample)s, %(Humidity)s, %(Light)s,' - ' %(Temperature)s, %(Equipment Fault)s, %(Blossoms)s, %(Plants)s,' - ' %(Fruit)s, %(Max Height)s, %(Min Height)s,' - ' %(Med Height)s, %(Notes)s)') - - def __init__(self, host, database, user, password): - self.connection = pg.connect(host=host, database=database, - user=user, password=password, cursor_factory=DictCursor) - - techs = self.query("SELECT name FROM lab_techs ORDER BY name") - labs = self.query("SELECT id FROM labs ORDER BY id") - plots = self.query("SELECT DISTINCT plot FROM plots ORDER BY plot") - self.fields['Technician']['values'] = [x['name'] for x in techs] - self.fields['Lab']['values'] = [x['id'] for x in labs] - self.fields['Plot']['values'] = [str(x['plot']) for x in plots] - - def query(self, query, parameters=None): - with self.connection: - with self.connection.cursor() as cursor: - cursor.execute(query, parameters) - # cursor.description is None when - # no rows are returned - if cursor.description is not None: - return cursor.fetchall() - - def get_all_records(self, all_dates=False): - """Return all records. - - By default, only return today's records, unless - all_dates is True. - """ - query = ('SELECT * FROM data_record_view ' - 'WHERE %(all_dates)s OR "Date" = CURRENT_DATE ' - 'ORDER BY "Date" DESC, "Time", "Lab", "Plot"') - return self.query(query, {'all_dates': all_dates}) - - def get_record(self, rowkey): - """Return a single record - - rowkey must be a tuple of date, time, lab, and plot - """ - date, time, lab, plot = rowkey - query = ( - 'SELECT * FROM data_record_view ' - 'WHERE "Date" = %(date)s AND "Time" = %(time)s ' - 'AND "Lab" = %(lab)s AND "Plot" = %(plot)s') - result = self.query( - query, - {"date": date, "time": time, "lab": lab, "plot": plot} - ) - return result[0] if result else dict() - - def save_record(self, record, rowkey): - """Save a record to the database - - rowkey must be a tuple of date, time, lab, and plot. - Or None if this is a new record. - """ - if rowkey: - key_date, key_time, key_lab, key_plot = rowkey - record.update({ - "key_date": key_date, - "key_time": key_time, - "key_lab": key_lab, - "key_plot": key_plot - }) - - # Lab check is based on the entered date/time/lab - if self.get_lab_check( - record['Date'], record['Time'], record['Lab'] - ): - lc_query = self.lc_update_query - else: - lc_query = self.lc_insert_query - # Plot check is based on the key values - if rowkey: - pc_query = self.pc_update_query - else: - pc_query = self.pc_insert_query - - self.query(lc_query, record) - self.query(pc_query, record) - - def get_lab_check(self, date, time, lab): - """Retrieve the lab check record for the given date, time, and lab""" - query = ('SELECT date, time, lab_id, lab_tech_id, ' - 'lt.name as lab_tech FROM lab_checks JOIN lab_techs lt ' - 'ON lab_checks.lab_tech_id = lt.id WHERE ' - 'lab_id = %(lab)s AND date = %(date)s AND time = %(time)s') - results = self.query( - query, {'date': date, 'time': time, 'lab': lab}) - return results[0] if results else dict() - - def get_current_seed_sample(self, lab, plot): - """Get the seed sample currently planted in the given lab and plot""" - result = self.query('SELECT current_seed_sample FROM plots ' - 'WHERE lab_id=%(lab)s AND plot=%(plot)s', - {'lab': lab, 'plot': plot}) - return result[0]['current_seed_sample'] if result else '' - - def add_weather_data(self, data): - query = ( - 'INSERT INTO local_weather VALUES ' - '(%(observation_time_rfc822)s, %(temp_c)s, ' - '%(relative_humidity)s, %(pressure_mb)s, ' - '%(weather)s)' - ) - try: - self.query(query, data) - except pg.IntegrityError: - # already have weather for this datetime - pass - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data, rownum=None): - """Save a dict of data to the CSV file""" - - if rownum is None: - # This is a new record - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - else: - # This is an update - records = self.get_all_records() - records[rownum] = data - with open(self.file, 'w', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - csvwriter.writeheader() - csvwriter.writerows(records) - - def get_all_records(self): - """Read in all records from the CSV and return a list""" - if not self.file.exists(): - return [] - - with open(self.file, 'r', encoding='utf-8') as fh: - # Casting to list is necessary for unit tests to work - csvreader = csv.DictReader(fh) - missing_fields = set(self.fields.keys()) - set(csvreader.fieldnames) - if len(missing_fields) > 0: - fields_string = ', '.join(missing_fields) - raise Exception( - f"File is missing fields: {fields_string}" - ) - records = list(csvreader) - - # Correct issue with boolean fields - trues = ('true', 'yes', '1') - bool_fields = [ - key for key, meta - in self.fields.items() - if meta['type'] == FT.boolean - ] - for record in records: - for key in bool_fields: - record[key] = record[key].lower() in trues - return records - - def get_record(self, rownum): - """Get a single record by row number - - Callling code should catch IndexError - in case of a bad rownum. - """ - - return self.get_all_records()[rownum] - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'}, - 'db_host': {'type': 'str', 'value': 'localhost'}, - 'db_name': {'type': 'str', 'value': 'abq'}, - 'weather_station': {'type': 'str', 'value': 'KBMG'}, - 'abq_rest_url': { - 'type': 'str', - 'value': 'http://localhost:8000/' - }, - 'abq_sftp_host': {'type': 'str', 'value': 'localhost'}, - 'abq_sftp_port': {'type': 'int', 'value': 22}, - 'abq_sftp_path': {'type': 'str', 'value': 'ABQ/BLTN_IN'} - } - - config_dirs = { - "Linux": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - "freebsd7": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - 'Darwin': Path.home() / 'Library' / 'Application Support', - 'Windows': Path.home() / 'AppData' / 'Local' - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - filedir = self.config_dirs.get(platform.system(), Path.home()) - self.filepath = filedir / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - json_string = json.dumps(self.fields) - with open(self.filepath, 'w', encoding='utf-8') as fh: - fh.write(json_string) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.loads(fh.read()) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value - -class WeatherDataModel: - - base_url = 'http://w1.weather.gov/xml/current_obs/%7B%7D.xml' - - def __init__(self, station): - self.url = self.base_url.format(station) - - - def get_weather_data(self): - response = urlopen(self.url) - - xmlroot = ElementTree.fromstring(response.read()) - weatherdata = { - 'observation_time_rfc822': None, - 'temp_c': None, - 'relative_humidity': None, - 'pressure_mb': None, - 'weather': None - } - - for tag in weatherdata: - element = xmlroot.find(tag) - if element is not None: - weatherdata[tag] = element.text - - return weatherdata - - -class CorporateRestModel: - - def __init__(self, base_url): - - self.auth_url = f'{base_url}/auth' - self.files_url = f'{base_url}/files' - self.session = requests.session() - - @staticmethod - def _raise_for_status(response): - try: - response.raise_for_status() - except requests.HTTPError: - raise Exception(response.json().get('message')) - - def authenticate(self, username, password): - """Authenticate to the server""" - response = self.session.post( - self.auth_url, - data={'username': username, 'password': password} - ) - self._raise_for_status(response) - - def check_file(self, filename): - """See if a file exists on the server""" - url = f"{self.files_url}/{filename}" - response = self.session.head(url) - if response.status_code == 200: - return True - elif response.status_code == 404: - return False - self._raise_for_status(response) - - def get_file(self, filename): - """Download a file from the server""" - url = f"{self.files_url}/{filename}" - response = self.session.get(url) - self._raise_for_status(response) - return response.text - - def upload_file(self, filepath): - """PUT a file on the server""" - with open(filepath, 'rb') as fh: - files = {'file': fh} - response = self.session.put( - self.files_url, files=files - ) - self._raise_for_status(response) - - -class SFTPModel: - - def __init__(self, host, port=22): - self.host = host - self.port = port - - # setup SSHClient - self._client = paramiko.SSHClient() - self._client.set_missing_host_key_policy( - paramiko.AutoAddPolicy() - ) - self._client.load_system_host_keys() - - - def authenticate(self, username, password): - try: - self._client.connect( - self.host, username=username, - password=password, port=self.port - ) - except paramiko.AuthenticationException: - raise Exception( - 'The username and password were not accepted by the server.' - ) - - def _check_auth(self): - transport = self._client.get_transport() - if not transport.is_active() and transport.is_authenticated(): - raise Exception('Not connected to a server.') - - - def check_file(self, remote_path): - """Check if the file at remote_path exists""" - self._check_auth() - sftp = self._client.open_sftp() - try: - sftp.stat(remote_path) - except FileNotFoundError: - return False - return True - - def upload_file(self, local_path, remote_path): - """Upload file at local_path to remote_path - - Both paths must include a filename - """ - self._check_auth() - sftp = self._client.open_sftp() - - # Create the dstination path if it doesn't exist - remote_path = Path(remote_path) - for directory in remote_path.parent.parts: - if directory not in sftp.listdir(): - sftp.mkdir(directory) - sftp.chdir(directory) - # copy the file - # just use filename because our CWD should - # be the full path without the name - sftp.put(local_path, remote_path.name) - - def get_file(self, remote_path, local_path): - self._check_auth() - sftp = self._client.open_sftp() - sftp.get(remote_path, local_path) diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/network.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/network.py deleted file mode 100644 index 65fdd35..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/network.py +++ /dev/null @@ -1,82 +0,0 @@ -from urllib.request import urlopen -from xml.etree import ElementTree -import requests -import ftplib as ftp -from os import path - -def get_local_weather(station): - """Retrieve local weather data from the web - - Returns a dictionary containing: - - observation_time_rfc822: timestamp of observation in rfc822 format - - temp_c: The temperature in degrees C - - relative_humidity: Relative Humidity percentage - - pressure_mb: Air pressure in mb - - weather: A string describing weather conditions - """ - url = f'http://w1.weather.gov/xml/current_obs/%7Bstation%7D.xml' - response = urlopen(url) - - xmlroot = ElementTree.fromstring(response.read()) - weatherdata = { - 'observation_time_rfc822': None, - 'temp_c': None, - 'relative_humidity': None, - 'pressure_mb': None, - 'weather': None - } - - for tag in weatherdata: - element = xmlroot.find(tag) - if element is not None: - weatherdata[tag] = element.text - - return weatherdata - - -def upload_to_corporate_rest( - filepath, upload_url, auth_url, - username, password): - """Upload a file to the corporate server using REST""" - - session = requests.session() - - response = session.post( - auth_url, - data={'username': username, 'password': password} - ) - response.raise_for_status() - - files = {'file': open(filepath, 'rb')} - response = session.put( - upload_url, - files=files - ) - files['file'].close() - response.raise_for_status() - - -def upload_to_corporate_ftp( - filepath, ftp_host, - ftp_port, ftp_user, ftp_pass): - """Upload a file to the corporate server using FTP""" - - with ftp.FTP() as ftp_cx: - # connect and login - ftp_cx.connect(ftp_host, ftp_port) - ftp_cx.login(ftp_user, ftp_pass) - - # upload file - filename = path.basename(filepath) - - with open(filepath, 'rb') as fh: - ftp_cx.storbinary('STOR {}'.format(filename), fh) - -def get_corporate_ftp_files(ftp_host, ftp_port, ftp_user, ftp_pass): - """Get a list of the files on the FTP host""" - with ftp.FTP() as ftp_cx: - ftp_cx.connect(ftp_host, ftp_port) - ftp_cx.login(ftp_user, ftp_pass) - files = ftp_cx.nlst() - - return files diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/test/__init__.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/test/test_application.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/test/test_application.py deleted file mode 100644 index 73cc7b4..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/test/test_application.py +++ /dev/null @@ -1,72 +0,0 @@ -from unittest import TestCase -from unittest.mock import patch -from .. import application - - -class TestApplication(TestCase): - records = [ - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '1', 'Seed Sample': 'AX477', - 'Humidity': '24.09', 'Light': '1.03', 'Temperature': '22.01', - 'Equipment Fault': False, 'Plants': '9', 'Blossoms': '21', - 'Fruit': '3', 'Max Height': '8.7', 'Med Height': '2.73', - 'Min Height': '1.67', 'Notes': '\n\n', - }, - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '2', 'Seed Sample': 'AX478', - 'Humidity': '24.47', 'Light': '1.01', 'Temperature': '21.44', - 'Equipment Fault': False, 'Plants': '14', 'Blossoms': '27', - 'Fruit': '1', 'Max Height': '9.2', 'Med Height': '5.09', - 'Min Height': '2.35', 'Notes': '' - } - ] - - settings = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'} - } - - def setUp(self): - # can be parenthesized in python 3.10+ - with \ - patch('abq_data_entry.application.m.CSVModel') as csvmodel,\ - patch('abq_data_entry.application.m.SettingsModel') as settingsmodel,\ - patch('abq_data_entry.application.Application._show_login') as show_login,\ - patch('abq_data_entry.application.v.DataRecordForm'),\ - patch('abq_data_entry.application.v.RecordList'),\ - patch('abq_data_entry.application.ttk.Notebook'),\ - patch('abq_data_entry.application.get_main_menu_for_os')\ - : - - settingsmodel().fields = self.settings - csvmodel().get_all_records.return_value = self.records - show_login.return_value = True - self.app = application.Application() - - def tearDown(self): - self.app.update() - self.app.destroy() - - def test_show_recordlist(self): - self.app._show_recordlist() - self.app.update() - self.app.notebook.select.assert_called_with(self.app.recordlist) - - def test_populate_recordlist(self): - # test correct functions - self.app._populate_recordlist() - self.app.model.get_all_records.assert_called() - self.app.recordlist.populate.assert_called_with(self.records) - - # test exceptions - - self.app.model.get_all_records.side_effect = Exception('Test message') - with patch('abq_data_entry.application.messagebox'): - self.app._populate_recordlist() - application.messagebox.showerror.assert_called_with( - title='Error', message='Problem reading file', - detail='Test message' - ) diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/test/test_models.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/test/test_models.py deleted file mode 100644 index 0cb1baf..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/test/test_models.py +++ /dev/null @@ -1,137 +0,0 @@ -from .. import models -from unittest import TestCase -from unittest import mock - -from pathlib import Path - -class TestCSVModel(TestCase): - - def setUp(self): - - self.file1_open = mock.mock_open( - read_data=( - "Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light," - "Temperature,Equipment Fault,Plants,Blossoms,Fruit,Min Height," - "Max Height,Med Height,Notes\r\n" - "2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,14," - "27,1,2.35,9.2,5.09,\r\n" - "2021-06-01,8:00,J Simms,A,3,AX479,24.15,1,20.82,False,18,49," - "6,2.47,14.2,11.83,\r\n")) - self.file2_open = mock.mock_open(read_data='') - - self.model1 = models.CSVModel('file1') - self.model2 = models.CSVModel('file2') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_all_records(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - records = self.model1.get_all_records() - - self.assertEqual(len(records), 2) - self.assertIsInstance(records, list) - self.assertIsInstance(records[0], dict) - - fields = ( - 'Date', 'Time', 'Technician', 'Lab', 'Plot', - 'Seed Sample', 'Humidity', 'Light', - 'Temperature', 'Equipment Fault', 'Plants', - 'Blossoms', 'Fruit', 'Min Height', 'Max Height', - 'Med Height', 'Notes') - - for field in fields: - self.assertIn(field, records[0].keys()) - - # testing boolean conversion - self.assertFalse(records[0]['Equipment Fault']) - - self.file1_open.assert_called_with( - Path('file1'), 'r', encoding='utf-8' - ) - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_record(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - record0 = self.model1.get_record(0) - record1 = self.model1.get_record(1) - - self.assertNotEqual(record0, record1) - self.assertEqual(record0['Date'], '2021-06-01') - self.assertEqual(record1['Plot'], '3') - self.assertEqual(record0['Med Height'], '5.09') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_save_record(self, mock_path_exists): - - record = { - "Date": '2021-07-01', "Time": '12:00', - "Technician": 'Test Technician', "Lab": 'E', - "Plot": '17', "Seed Sample": 'test sample', - "Humidity": '10', "Light": '99', - "Temperature": '20', "Equipment Fault": False, - "Plants": '10', "Blossoms": '200', - "Fruit": '250', "Min Height": '40', - "Max Height": '50', "Med Height": '55', - "Notes": 'Test Note\r\nTest Note\r\n' - } - record_as_csv = ( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - - # test appending a file - mock_path_exists.return_value = True - - # test insert - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - self.file2_open.assert_called_with( - Path('file2'), 'a', encoding='utf-8' - ) - file2_handle = self.file2_open() - file2_handle.write.assert_called_with(record_as_csv) - - # test update - with mock.patch('abq_data_entry.models.open', self.file1_open): - self.model1.save_record(record, 1) - self.file1_open.assert_called_with( - Path('file1'), 'w', encoding='utf-8' - ) - file1_handle = self.file1_open() - file1_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call( - '2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,' - '14,27,1,2.35,9.2,5.09,\r\n'), - mock.call( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - ]) - - # test new file - mock_path_exists.return_value = False - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - file2_handle = self.file2_open() - file2_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call(record_as_csv) - ]) - with self.assertRaises(IndexError): - self.model2.save_record(record, 2) diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py deleted file mode 100644 index e796eb8..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py +++ /dev/null @@ -1,219 +0,0 @@ -from .. import widgets -from unittest import TestCase -from unittest.mock import Mock -import tkinter as tk -from tkinter import ttk - - -class TkTestCase(TestCase): - """A test case designed for Tkinter widgets and views""" - - keysyms = { - '-': 'minus', - ' ': 'space', - ':': 'colon', - # For more see http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm - } - @classmethod - def setUpClass(cls): - cls.root = tk.Tk() - cls.root.wait_visibility() - - @classmethod - def tearDownClass(cls): - cls.root.update() - cls.root.destroy() - - def type_in_widget(self, widget, string): - widget.focus_force() - for char in string: - char = self.keysyms.get(char, char) - self.root.update() - widget.event_generate(''.format(char)) - self.root.update() - - def click_on_widget(self, widget, x, y, button=1): - widget.focus_force() - self.root.update() - widget.event_generate("".format(button), x=x, y=y) - self.root.update() - - -class TestValidatedMixin(TkTestCase): - - def setUp(self): - class TestClass(widgets.ValidatedMixin, ttk.Entry): - pass - self.vw1 = TestClass(self.root) - - def assertEndsWith(self, text, ending): - if not text.endswith(ending): - raise AssertionError( - "'{}' does not end with '{}'".format(text, ending) - ) - - def test_init(self): - - # check error var setup - self.assertIsInstance(self.vw1.error, tk.StringVar) - - # check validation config - self.assertEqual(self.vw1.cget('validate'), 'all') - self.assertEndsWith( - self.vw1.cget('validatecommand'), - '%P %s %S %V %i %d' - ) - self.assertEndsWith( - self.vw1.cget('invalidcommand'), - '%P %s %S %V %i %d' - ) - - def test__validate(self): - - # by default, _validate should return true - args = { - 'proposed': 'abc', - 'current': 'ab', - 'char': 'c', - 'event': 'key', - 'index': '2', - 'action': '1' - } - # test key validate routing - self.assertTrue( - self.vw1._validate(**args) - ) - fake_key_val = Mock(return_value=False) - self.vw1._key_validate = fake_key_val - self.assertFalse( - self.vw1._validate(**args) - ) - fake_key_val.assert_called_with(**args) - - # test focusout validate routing - args['event'] = 'focusout' - self.assertTrue(self.vw1._validate(**args)) - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - self.assertFalse(self.vw1._validate(**args)) - fake_focusout_val.assert_called_with(event='focusout') - - - def test_trigger_focusout_validation(self): - - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - fake_focusout_invalid = Mock() - self.vw1._focusout_invalid = fake_focusout_invalid - - val = self.vw1.trigger_focusout_validation() - self.assertFalse(val) - fake_focusout_val.assert_called_with(event='focusout') - fake_focusout_invalid.assert_called_with(event='focusout') - - -class TestValidatedSpinbox(TkTestCase): - - def setUp(self): - self.value = tk.DoubleVar() - self.vsb = widgets.ValidatedSpinbox( - self.root, - textvariable=self.value, - from_=-10, to=10, increment=1 - ) - self.vsb.pack() - self.vsb.wait_visibility() - - def tearDown(self): - self.vsb.destroy() - - def key_validate(self, new, current=''): - return self.vsb._key_validate( - new, # inserted char - 'end', # position to insert - current, # current value - current + new, # proposed value - '1' # action code (1 == insert) - ) - - def click_arrow(self, arrow='inc', times=1): - x = self.vsb.winfo_width() - 5 - y = 5 if arrow == 'inc' else 15 - for _ in range(times): - self.click_on_widget(self.vsb, x=x, y=y) - - def test__key_validate(self): - ################### - # Unit-test Style # - ################### - - # test valid input - for x in range(10): - x = str(x) - p_valid = self.vsb._key_validate(x, 'end', '', x, '1') - n_valid = self.vsb._key_validate(x, 'end', '-', '-' + x, '1') - self.assertTrue(p_valid) - self.assertTrue(n_valid) - - # test letters - valid = self.key_validate('a') - self.assertFalse(valid) - - # test non-increment number - valid = self.key_validate('1', '0.') - self.assertFalse(valid) - - # test too high number - valid = self.key_validate('0', '10') - self.assertFalse(valid) - - def test__key_validate_integration(self): - ########################## - # Integration test style # - ########################## - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '10') - self.assertEqual(self.vsb.get(), '10') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, 'abcdef') - self.assertEqual(self.vsb.get(), '') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '200') - self.assertEqual(self.vsb.get(), '2') - - def test__focusout_validate(self): - - # test valid - for x in range(10): - self.value.set(x) - posvalid = self.vsb._focusout_validate() - self.value.set(-x) - negvalid = self.vsb._focusout_validate() - - self.assertTrue(posvalid) - self.assertTrue(negvalid) - - # test too low - self.value.set('-200') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - # test invalid number - self.vsb.delete(0, 'end') - self.vsb.insert('end', '-a2-.3') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - def test_arrows(self): - self.value.set(0) - self.click_arrow(times=1) - self.assertEqual(self.vsb.get(), '1') - - self.click_arrow(times=5) - self.assertEqual(self.vsb.get(), '6') - - self.click_arrow(arrow='dec', times=1) - self.assertEqual(self.vsb.get(), '5') diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index 0faa717..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,556 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT -from . import images - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, style='', cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - if style: - frame.configure(style=style) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # new for ch9 - style = ttk.Style() - - # Frame styles - style.configure( - 'RecordInfo.TLabelframe', - background='khaki', padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe', background='lightblue', - padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe', - background='lightgreen', padx=10, pady=10 - ) - # Style the label Element as well - style.configure( - 'RecordInfo.TLabelframe.Label', background='khaki', - padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe.Label', - background='lightblue', padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe.Label', - background='lightgreen', padx=10, pady=10 - ) - - # Style for the form labels and buttons - style.configure('RecordInfo.TLabel', background='khaki') - style.configure('RecordInfo.TRadiobutton', background='khaki') - style.configure('EnvironmentInfo.TLabel', background='lightblue') - style.configure( - 'EnvironmentInfo.TCheckbutton', - background='lightblue' - ) - style.configure('PlantInfo.TLabel', background='lightgreen') - - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # new chapter 8 - # variable to track current record id - self.current_record = None - - # Label for displaying what record we're editing - self.record_label = ttk.Label(self) - self.record_label.grid(row=0, column=0) - - # Record info section - r_info = self._add_frame( - "Record Information", 'RecordInfo.TLabelframe' - ) - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - label_args={'style': 'RecordInfo.TLabel'}, - input_args={'style': 'RecordInfo.TRadiobutton'} - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame( - "Environment Data", 'EnvironmentInfo.TLabelframe' - ) - - e_info = ttk.LabelFrame( - self, - text="Environment Data", - style='EnvironmentInfo.TLabelframe' - ) - e_info.grid(row=2, column=0, sticky="we") - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - disable_var=self._vars['Equipment Fault'], - var=self._vars['Temperature'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'}, - input_args={'style': 'EnvironmentInfo.TCheckbutton'} - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data", 'PlantInfo.TLabelframe') - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=2) - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={"max_var": max_height_var, - "focus_update_var": min_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={"min_var": min_height_var, - "focus_update_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={"min_var": min_height_var, - "max_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=2) - - - # Notes section -- Update grid row value for ch8 - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=4, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=5) - self.save_button_logo = tk.PhotoImage(file=images.SAVE_ICON) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save, - image=self.save_button_logo, compound=tk.LEFT - ) - self.savebutton.pack(side=tk.RIGHT) - - self.reset_button_logo = tk.PhotoImage(file=images.RESET_ICON) - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset, - image=self.reset_button_logo, compound=tk.LEFT - ) - self.resetbutton.pack(side=tk.RIGHT) - - # new for ch12 - # Triggers - for field in ('Lab', 'Plot'): - self._vars[field].trace_add( - 'write', self._populate_current_seed_sample) - - for field in ('Date', 'Time', 'Lab'): - self._vars[field].trace_add( - 'write', self._populate_tech_for_lab_check) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - # rewrite for ch12 - def load_record(self, rowkey, data=None): - """Load a record's data into the form""" - self.current_record = rowkey - if rowkey is None: - self.reset() - self.record_label.config(text='New Record') - else: - date, time, lab, plot = rowkey - title = f'Record for Lab {lab}, Plot {plot} at {date} {time}' - self.record_label.config(text=title) - for key, var in self._vars.items(): - var.set(data.get(key, '')) - try: - var.label_widget.input.trigger_focusout_validation() - except AttributeError: - pass - - # new for ch12 - - def _populate_current_seed_sample(self, *_): - """Auto-populate the current seed sample for Lab and Plot""" - if not self.settings['autofill sheet data'].get(): - return - plot = self._vars['Plot'].get() - lab = self._vars['Lab'].get() - - if plot and lab: - seed = self.model.get_current_seed_sample(lab, plot) - self._vars['Seed Sample'].set(seed) - - def _populate_tech_for_lab_check(self, *_): - """Populate technician based on the current lab check""" - if not self.settings['autofill sheet data'].get(): - return - date = self._vars['Date'].get() - try: - datetime.fromisoformat(date) - except ValueError: - return - time = self._vars['Time'].get() - lab = self._vars['Lab'].get() - - if all([date, time, lab]): - check = self.model.get_lab_check(date, time, lab) - tech = check['lab_tech'] if check else '' - self._vars['Technician'].set(tech) - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) - - -class RecordList(tk.Frame): - """Display for CSV file contents""" - - column_defs = { - '#0': {'label': 'Row', 'anchor': tk.W}, - 'Date': {'label': 'Date', 'width': 150, 'stretch': True}, - 'Time': {'label': 'Time'}, - 'Lab': {'label': 'Lab', 'width': 40}, - 'Plot': {'label': 'Plot', 'width': 80} - } - default_width = 100 - default_minwidth = 10 - default_anchor = tk.CENTER - - def __init__(self, parent, inserted, updated, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self.inserted = inserted - self.updated = updated - self.columnconfigure(0, weight=1) - self.rowconfigure(0, weight=1) - - # create treeview - self.treeview = ttk.Treeview( - self, - columns=list(self.column_defs.keys())[1:], - selectmode='browse' - ) - self.treeview.grid(row=0, column=0, sticky='NSEW') - - # Configure treeview columns - for name, definition in self.column_defs.items(): - label = definition.get('label', '') - anchor = definition.get('anchor', self.default_anchor) - minwidth = definition.get('minwidth', self.default_minwidth) - width = definition.get('width', self.default_width) - stretch = definition.get('stretch', False) - self.treeview.heading(name, text=label, anchor=anchor) - self.treeview.column( - name, anchor=anchor, minwidth=minwidth, - width=width, stretch=stretch - ) - - self.treeview.bind('', self._on_open_record) - self.treeview.bind('', self._on_open_record) - - # configure scrollbar for the treeview - self.scrollbar = ttk.Scrollbar( - self, - orient=tk.VERTICAL, - command=self.treeview.yview - ) - self.treeview.configure(yscrollcommand=self.scrollbar.set) - self.scrollbar.grid(row=0, column=1, sticky='NSW') - - # configure tagging - self.treeview.tag_configure('inserted', background='lightgreen') - self.treeview.tag_configure('updated', background='lightblue') - - # For ch12, hide first column since row # is no longer meaningful - self.treeview.config(show='headings') - - # new for ch12 - - @staticmethod - def _rowkey_to_iid(rowkey): - """Convert a rowkey tuple to an IID string""" - return '{}|{}|{}|{}'.format(*rowkey) - - @staticmethod - def _iid_to_rowkey(iid): - """Convert an IID string to a rowkey tuple""" - return tuple(iid.split("|")) - - # update for ch12 - def populate(self, rows): - """Clear the treeview and write the supplied data rows to it.""" - - for row in self.treeview.get_children(): - self.treeview.delete(row) - - cids = list(self.column_defs.keys())[1:] - for rowdata in rows: - values = [rowdata[key] for key in cids] - rowkey = tuple([str(v) for v in values]) - if rowkey in self.inserted: - tag = 'inserted' - elif rowkey in self.updated: - tag = 'updated' - else: - tag = '' - iid = self._rowkey_to_iid(rowkey) - self.treeview.insert( - '', 'end', iid=iid, text=iid, values=values, tag=tag) - - if len(rows) > 0: - firstrow = self.treeview.identify_row(0) - self.treeview.focus_set() - self.treeview.selection_set(firstrow) - self.treeview.focus(firstrow) - - # update for ch12 - def _on_open_record(self, *_): - """Handle record open request""" - selected_iid = self.treeview.selection()[0] - self.selected_id = self._iid_to_rowkey(selected_iid) - self.event_generate('<>') diff --git a/Chapter13/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter13/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index ec72ed4..0000000 --- a/Chapter13/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,441 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - style = ttk.Style() - widget_class = self.winfo_class() - validated_style = 'ValidatedInput.' + widget_class - style.map( - validated_style, - foreground=[('invalid', 'white'), ('!invalid', 'black')], - fieldbackground=[('invalid', 'darkred'), ('!invalid', 'white')] - ) - self.configure(style=validated_style) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - pass - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.input.error = getattr(button, 'error', None) - self.input.trigger_focusout_validation = \ - button._focusout_validate - else: - self.input = input_class(self, **input_args) - - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - error_style = 'Error.' + label_args.get('style', 'TLabel') - ttk.Style().configure(error_style, foreground='darkred') - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error, style=error_style).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter13/ABQ_Data_Entry/docs/Application_layout.png b/Chapter13/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter13/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter13/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter13/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index fec5e84..0000000 --- a/Chapter13/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,97 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - - -Description ------------ -The program is being created to minimize data entry errors for laboratory measurements. - -Functionality Required ----------------------- - -The program must: - -* Provide a UI for reading, updating, and appending data to the CSV file -* allow all relevant, valid data to be entered, as per the field chart -* append entered data to a CSV file - - The CSV file must have a filename of abq_data_record_CURRENTDATE.csv, - where CURRENTDATE is the date of the checks in ISO format (Year-month-day) - - The CSV file must have all the fields as per the chart - -* enforce correct datatypes per field -* have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout -* prevent saving the record when errors are present - -The program should try, whenever possible, to: - -* enforce reasonable limits on data entered -* Auto-fill data -* Suggest likely correct values -* Provide a smooth and efficient workflow - -Functionality Not Required --------------------------- - -The program does not need to: - -* Allow deletion of data. - -Limitations ------------ - -The program must: - -* Be efficiently operable by keyboard-only users. -* Be accessible to color blind users. -* Run on Debian Linux. -* Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+----------+------+------------------+--------------------------+ -|Field | Datatype | Units| Range |Descripton | -+============+==========+======+==================+==========================+ -|Date |Date | | |Date of record | -+------------+----------+------+------------------+--------------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00 | | -+------------+----------+------+------------------+--------------------------+ -|Lab |String | | A - C |Lab ID | -+------------+----------+------+------------------+--------------------------+ -|Technician |String | | |Technician name | -+------------+----------+------+------------------+--------------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+----------+------+------------------+--------------------------+ -|Seed |String | | |Seed sample ID | -|sample | | | | | -+------------+----------+------+------------------+--------------------------+ -|Fault |Bool | | |Fault on environmental | -| | | | |sensor | -+------------+----------+------+------------------+--------------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -+------------+----------+------+------------------+--------------------------+ -|Humidity |Decimal |g/m³ | 0.5 - 52.0 |Abs humidity at plot | -+------------+----------+------+------------------+--------------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -+------------+----------+------+------------------+--------------------------+ -|Blossoms |Int | | 0 - 1000 |Number of blossoms in plot| -+------------+----------+------+------------------+--------------------------+ -|Fruit |Int | | 0 - 1000 |Number of fruits in plot | -+------------+----------+------+------------------+--------------------------+ -|Plants |Int | | 0 - 20 |Number of plants in plot | -+------------+----------+------+------------------+--------------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest plant in| -| | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest plant | -| | | | |in plot | -+------------+----------+------+------------------+--------------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of plants in| -|height | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+----------+------+------------------+--------------------------+ diff --git a/Chapter13/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter13/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter13/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter13/ABQ_Data_Entry/sql/abq_sample_data.sql b/Chapter13/ABQ_Data_Entry/sql/abq_sample_data.sql deleted file mode 100644 index fd4316c..0000000 --- a/Chapter13/ABQ_Data_Entry/sql/abq_sample_data.sql +++ /dev/null @@ -1,1767 +0,0 @@ -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 4291); - - -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 3, 'AXM479', 24.17, 0.97, 21.33, false, 15, 13, 1, 14.20, 1.56, 11.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 7, 'AXM479', 24.25, 0.99, 20.43, false, 2, 6, 0, 11.58, 2.27, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 11, 'AXM479', 24.15, 0.98, 21.06, false, 13, 13, 1, 10.90, 1.90, 6.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 15, 'AXM479', 24.24, 1.01, 22.03, false, 34, 20, 3, 18.16, 1.77, 15.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 19, 'AXM479', 24.43, 1.01, 21.05, false, 11, 11, 1, 19.18, 1.99, 13.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 3, 'AXM479', 24.50, 0.98, 20.91, false, 26, 17, 4, 14.20, 2.19, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 7, 'AXM479', 24.06, 0.98, 20.20, false, 0, 0, 0, 16.36, 2.25, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 11, 'AXM479', 23.97, 1.03, 21.29, false, 10, 11, 0, 16.00, 2.09, 7.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 15, 'AXM479', 23.94, 1.01, 21.33, false, 28, 16, 4, 18.50, 2.21, 18.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 19, 'AXM479', 23.86, 1.02, 20.35, false, 5, 8, 0, 9.86, 1.71, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 3, 'AXM479', 24.42, 1.03, 21.93, false, 39, 14, 0, 14.20, 1.96, 13.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 7, 'AXM479', 23.61, 0.97, 20.21, false, 1, 2, 0, 15.40, 1.68, 2.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 11, 'AXM479', 24.48, 1.00, 20.74, false, 1, 13, 0, 16.04, 1.53, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 15, 'AXM479', 23.93, 1.00, 20.35, false, 32, 18, 2, 17.05, 1.52, 3.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 19, 'AXM479', 23.71, 0.99, 20.48, false, 21, 14, 2, 17.33, 1.65, 11.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 4, 'AXM480', 23.63, 1.03, 21.89, false, 5, 5, 1, 16.27, 2.23, 13.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 2, 'AXM478', 23.62, 1.03, 20.26, false, 34, 17, 5, 9.20, 1.74, 3.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 6, 'AXM478', 23.93, 1.00, 20.59, false, 6, 3, 1, 12.20, 2.21, 4.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 10, 'AXM478', 24.09, 0.98, 20.29, false, 1, 2, 0, 14.27, 1.62, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 14, 'AXM478', 24.35, 1.02, 21.68, false, 9, 12, 0, 13.41, 1.69, 6.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 18, 'AXM478', 23.88, 1.02, 20.26, false, 11, 8, 2, 8.46, 1.85, 6.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 2, 'AXM478', 23.64, 1.02, 21.67, false, 41, 3, 2, 9.20, 1.77, 6.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 6, 'AXM478', 24.49, 1.01, 21.31, false, 30, 17, 3, 18.72, 1.79, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 10, 'AXM478', 23.59, 1.00, 20.98, false, 10, 14, 1, 7.98, 2.03, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 14, 'AXM478', 24.32, 0.97, 20.78, false, 5, 8, 1, 14.82, 1.75, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 18, 'AXM478', 23.61, 1.00, 20.35, false, 33, 18, 1, 14.25, 2.18, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 2, 'AXM478', 24.41, 0.98, 20.17, false, 21, 7, 2, 9.20, 2.01, 3.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 6, 'AXM478', 24.28, 0.99, 20.39, false, 8, 14, 1, 13.58, 1.51, 3.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 10, 'AXM478', 23.57, 1.01, 21.87, false, 21, 19, 1, 13.55, 2.02, 5.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 14, 'AXM478', 24.11, 1.03, 20.44, false, 20, 11, 1, 10.10, 2.49, 5.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 18, 'AXM478', 24.35, 0.99, 20.25, false, 12, 9, 2, 18.41, 1.88, 9.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 8, 'AXM480', 23.59, 1.00, 20.79, false, 27, 20, 0, 16.44, 1.99, 2.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 12, 'AXM480', 23.71, 0.99, 21.00, false, 11, 15, 2, 15.55, 1.99, 5.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 16, 'AXM480', 24.15, 1.01, 20.84, false, 12, 20, 1, 7.59, 2.18, 2.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 20, 'AXM480', 24.13, 1.02, 22.02, false, 5, 11, 1, 7.32, 2.07, 2.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 4, 'AXM480', 24.33, 1.01, 21.08, false, 7, 8, 0, 7.06, 2.32, 5.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 8, 'AXM480', 23.90, 1.03, 22.00, false, 4, 10, 1, 18.24, 2.02, 6.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 12, 'AXM480', 23.75, 1.01, 21.98, false, 6, 5, 1, 17.15, 1.53, 1.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 16, 'AXM480', 23.74, 0.99, 21.92, false, 0, 3, 0, 10.57, 1.59, 3.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 20, 'AXM480', 23.52, 0.99, 21.71, false, 6, 15, 1, 16.82, 1.94, 7.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 4, 'AXM480', 24.24, 0.99, 21.23, false, 19, 15, 2, 17.08, 2.18, 15.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 8, 'AXM480', 24.05, 1.02, 22.00, false, 13, 8, 1, 9.82, 2.38, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 12, 'AXM480', 24.46, 1.02, 21.33, false, 5, 5, 0, 14.71, 1.53, 2.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 16, 'AXM480', 24.39, 0.98, 21.82, false, 20, 10, 1, 11.26, 2.21, 4.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 20, 'AXM480', 23.53, 0.98, 21.34, false, 31, 19, 5, 8.25, 2.16, 8.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 3, 'AXM479', 24.60, 9.81, 24.90, false, 16, 13, 1, 14.36, 1.86, 11.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 7, 'AXM479', 24.32, 10.26, 24.71, false, 3, 7, 0, 11.70, 2.45, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 11, 'AXM479', 26.14, 10.46, 25.26, false, 13, 13, 1, 11.06, 2.08, 6.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 15, 'AXM479', 28.21, 9.97, 24.02, false, 36, 20, 4, 18.19, 1.99, 15.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 19, 'AXM479', 27.14, 9.50, 24.57, false, 11, 11, 2, 19.31, 2.13, 13.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 3, 'AXM479', 26.73, 9.62, 25.51, false, 27, 17, 4, 14.23, 2.50, 4.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 7, 'AXM479', 25.69, 10.31, 25.39, false, 0, 1, 1, 16.37, 2.35, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 11, 'AXM479', 25.82, 9.69, 25.70, false, 11, 11, 1, 16.16, 2.11, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 15, 'AXM479', 24.35, 9.59, 24.79, false, 29, 17, 4, 18.56, 2.49, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 19, 'AXM479', 27.32, 9.88, 25.64, false, 5, 8, 0, 9.92, 2.08, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 3, 'AXM479', 27.97, 10.29, 24.38, false, 41, 15, 1, 14.30, 2.09, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 7, 'AXM479', 23.70, 9.71, 24.53, false, 1, 2, 0, 15.44, 1.75, 2.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 3, 'AXM479', 28.34, 8.96, 26.08, false, 27, 18, 5, 14.30, 2.67, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 6, 'AXM478', 24.90, 10.22, 24.35, false, 7, 3, 2, 12.31, 2.44, 4.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 10, 'AXM478', 25.80, 9.67, 25.46, false, 2, 2, 0, 14.47, 1.87, 4.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 14, 'AXM478', 26.70, 10.39, 24.78, false, 10, 13, 1, 13.59, 1.73, 6.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 18, 'AXM478', 24.88, 9.70, 24.80, false, 13, 8, 2, 8.58, 2.16, 6.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 2, 'AXM478', 24.32, 9.80, 24.26, false, 43, 4, 2, 9.25, 1.79, 7.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 6, 'AXM478', 25.76, 10.28, 24.87, false, 32, 18, 3, 18.90, 2.02, 8.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 10, 'AXM478', 27.36, 10.15, 24.98, false, 10, 15, 1, 8.13, 2.35, 5.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 14, 'AXM478', 27.28, 10.18, 25.21, false, 5, 8, 2, 14.85, 1.85, 14.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 18, 'AXM478', 26.30, 9.83, 24.33, false, 33, 18, 1, 14.34, 2.20, 11.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 2, 'AXM478', 27.09, 10.33, 24.69, false, 23, 8, 3, 9.34, 2.16, 3.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 6, 'AXM478', 25.58, 10.42, 24.64, false, 10, 14, 2, 13.64, 1.88, 3.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 4, 'AXM480', 26.13, 10.30, 24.31, false, 5, 5, 2, 16.35, 2.34, 14.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 8, 'AXM480', 25.54, 10.07, 24.60, false, 28, 20, 1, 16.55, 2.05, 2.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 12, 'AXM480', 26.51, 10.46, 24.94, false, 13, 16, 2, 15.56, 2.10, 5.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 16, 'AXM480', 26.37, 9.64, 24.95, false, 12, 20, 2, 7.78, 2.41, 2.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 20, 'AXM480', 27.08, 10.29, 25.37, false, 6, 11, 1, 7.39, 2.38, 2.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 4, 'AXM480', 26.41, 10.37, 25.76, false, 9, 9, 0, 7.24, 2.48, 5.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 8, 'AXM480', 27.08, 10.36, 24.54, false, 5, 10, 2, 18.39, 2.16, 6.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 12, 'AXM480', 26.62, 9.94, 25.01, false, 6, 6, 2, 17.33, 1.69, 1.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 16, 'AXM480', 24.32, 9.88, 25.22, false, 2, 4, 0, 10.62, 1.76, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 20, 'AXM480', 26.62, 9.60, 25.84, false, 6, 15, 2, 16.84, 2.20, 7.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 4, 'AXM480', 27.93, 9.83, 24.86, false, 19, 16, 3, 17.21, 2.50, 15.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 2, 'AXM478', 24.89, 10.20, 26.01, false, 35, 17, 6, 9.27, 1.86, 3.87, ' -'); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 11, 'AXM479', 26.99, 10.15, 24.59, false, 1, 13, 0, 16.11, 1.68, 6.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 15, 'AXM479', 24.81, 9.90, 24.74, false, 33, 18, 3, 17.25, 1.52, 3.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 19, 'AXM479', 24.36, 10.23, 24.77, false, 23, 14, 2, 17.35, 1.68, 11.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 3, 'AXM479', 25.08, 7.07, 26.30, false, 17, 13, 2, 14.37, 2.12, 11.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 7, 'AXM479', 27.47, 7.79, 27.04, false, 3, 8, 0, 11.76, 2.76, 6.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 11, 'AXM479', 27.57, 7.09, 26.67, false, 15, 13, 2, 11.17, 2.43, 6.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 15, 'AXM479', 28.55, 7.60, 26.72, false, 36, 20, 4, 18.21, 2.04, 15.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 19, 'AXM479', 29.21, 8.04, 27.27, false, 13, 11, 3, 19.35, 2.52, 13.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 12, 'AXM480', 24.90, 10.09, 24.21, false, 7, 6, 1, 14.73, 1.76, 2.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 14, 'AXM478', 26.97, 9.56, 24.88, false, 20, 11, 1, 10.17, 2.62, 5.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 18, 'AXM478', 26.07, 10.43, 26.13, false, 14, 10, 3, 18.51, 1.97, 9.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 2, 'AXM478', 28.49, 8.37, 27.13, false, 35, 18, 6, 9.45, 2.10, 3.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 6, 'AXM478', 27.51, 8.12, 27.27, false, 9, 3, 3, 12.41, 2.79, 4.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 10, 'AXM478', 25.84, 7.47, 26.38, false, 2, 2, 0, 14.52, 1.97, 4.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 14, 'AXM478', 30.34, 8.66, 27.43, false, 10, 13, 2, 13.68, 1.76, 6.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 18, 'AXM478', 28.67, 8.70, 26.29, false, 15, 8, 2, 8.74, 2.40, 6.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 2, 'AXM478', 25.69, 8.10, 26.67, false, 45, 5, 3, 9.27, 1.92, 7.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 16, 'AXM480', 26.95, 10.19, 25.18, false, 22, 11, 2, 11.30, 2.34, 4.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 20, 'AXM480', 26.27, 9.55, 25.52, false, 31, 20, 6, 8.36, 2.29, 8.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 4, 'AXM480', 28.02, 8.94, 26.09, false, 6, 5, 2, 16.40, 2.59, 14.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 8, 'AXM480', 26.49, 8.14, 27.17, false, 30, 20, 2, 16.61, 2.21, 2.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 12, 'AXM480', 29.58, 7.90, 26.45, false, 14, 16, 2, 15.61, 2.40, 5.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 16, 'AXM480', 28.67, 8.84, 26.50, false, 12, 20, 2, 7.81, 2.45, 2.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 20, 'AXM480', 28.86, 7.12, 26.32, false, 8, 11, 1, 7.44, 2.57, 2.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 4, 'AXM480', 29.49, 8.12, 27.13, false, 9, 10, 0, 7.26, 2.78, 5.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 7, 'AXM479', 27.08, 8.63, 26.65, false, 2, 2, 2, 16.40, 2.67, 9.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 11, 'AXM479', 26.49, 7.76, 27.25, false, 13, 12, 1, 16.23, 2.39, 7.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 15, 'AXM479', 27.88, 8.94, 26.70, false, 31, 18, 5, 18.70, 2.78, 18.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 19, 'AXM479', 28.73, 8.17, 26.86, false, 7, 9, 1, 10.12, 2.15, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 3, 'AXM479', 30.64, 7.47, 26.41, false, 42, 16, 1, 14.32, 2.34, 13.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 7, 'AXM479', 26.50, 8.90, 27.56, false, 3, 2, 1, 15.56, 2.13, 2.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 11, 'AXM479', 30.61, 8.32, 26.15, false, 2, 13, 1, 16.26, 1.77, 6.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 15, 'AXM479', 28.69, 8.25, 26.74, false, 33, 18, 3, 17.38, 1.74, 3.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 19, 'AXM479', 27.64, 7.47, 27.00, false, 24, 15, 2, 17.35, 2.05, 11.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 8, 'AXM480', 28.28, 7.58, 26.16, false, 6, 11, 2, 18.42, 2.49, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 6, 'AXM478', 26.94, 8.26, 26.28, false, 32, 18, 4, 19.02, 2.39, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 10, 'AXM478', 28.55, 7.28, 26.04, false, 12, 15, 2, 8.19, 2.72, 5.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 14, 'AXM478', 28.23, 7.88, 26.31, false, 5, 8, 2, 15.01, 2.06, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 18, 'AXM478', 27.63, 7.55, 26.43, false, 34, 18, 2, 14.47, 2.42, 11.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 2, 'AXM478', 29.72, 7.99, 26.29, false, 25, 8, 4, 9.52, 2.34, 3.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 6, 'AXM478', 26.98, 7.53, 26.73, false, 12, 14, 2, 13.82, 1.96, 3.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 10, 'AXM478', 30.35, 8.07, 26.27, false, 23, 20, 3, 13.69, 2.49, 5.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 14, 'AXM478', 30.82, 8.18, 26.60, false, 22, 12, 2, 10.27, 2.63, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 18, 'AXM478', 27.85, 8.15, 27.35, false, 14, 10, 4, 18.64, 2.34, 9.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 12, 'AXM480', 27.93, 7.60, 26.65, false, 7, 7, 3, 17.53, 1.72, 1.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 16, 'AXM480', 28.27, 8.99, 26.20, false, 2, 4, 1, 10.70, 1.98, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 20, 'AXM480', 29.09, 7.07, 26.28, false, 8, 15, 3, 16.91, 2.53, 7.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 4, 'AXM480', 31.17, 7.85, 27.28, false, 20, 17, 4, 17.30, 2.56, 15.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 8, 'AXM480', 29.69, 8.51, 26.15, false, 15, 9, 2, 10.01, 2.88, 7.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 12, 'AXM480', 26.60, 7.60, 27.07, false, 7, 7, 2, 14.88, 1.88, 2.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 16, 'AXM480', 28.32, 7.43, 27.08, false, 23, 11, 3, 11.43, 2.37, 4.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 20, 'AXM480', 28.13, 8.44, 27.03, false, 32, 20, 7, 8.51, 2.33, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 3, 'AXM479', 28.50, 0.50, 22.14, false, 17, 14, 3, 14.37, 2.13, 11.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 7, 'AXM479', 27.54, 0.49, 22.32, false, 4, 9, 0, 11.90, 2.89, 6.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 11, 'AXM479', 29.97, 0.50, 22.36, false, 17, 14, 2, 11.27, 2.44, 6.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 15, 'AXM479', 32.53, 0.53, 22.30, false, 38, 20, 4, 18.25, 2.25, 15.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 19, 'AXM479', 30.55, 0.50, 22.41, false, 13, 12, 4, 19.55, 2.63, 13.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 3, 'AXM479', 32.04, 0.50, 22.06, false, 29, 18, 6, 14.31, 2.73, 4.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 7, 'AXM479', 28.30, 0.50, 22.02, false, 4, 3, 3, 16.59, 2.94, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 11, 'AXM479', 26.56, 0.49, 22.04, false, 15, 13, 2, 16.38, 2.42, 7.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 15, 'AXM479', 28.13, 0.48, 22.44, false, 33, 18, 5, 18.81, 3.05, 18.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 19, 'AXM479', 32.37, 0.47, 22.29, false, 7, 10, 1, 10.13, 2.18, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 3, 'AXM479', 32.17, 0.48, 22.12, false, 44, 16, 2, 14.37, 2.74, 13.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 7, 'AXM479', 27.73, 0.53, 22.39, false, 5, 3, 1, 15.74, 2.33, 2.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 11, 'AXM479', 33.51, 0.53, 22.34, false, 2, 13, 2, 16.32, 1.78, 6.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 15, 'AXM479', 29.20, 0.49, 22.18, false, 34, 19, 3, 17.53, 2.08, 3.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 19, 'AXM479', 30.04, 0.50, 22.16, false, 25, 15, 3, 17.47, 2.42, 11.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 4, 'AXM480', 28.53, 0.50, 22.44, false, 8, 6, 3, 16.55, 2.77, 14.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 2, 'AXM478', 29.31, 0.52, 22.04, false, 37, 19, 6, 9.55, 2.31, 4.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 6, 'AXM478', 30.78, 0.50, 22.46, false, 10, 4, 4, 12.50, 2.89, 4.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 10, 'AXM478', 28.92, 0.53, 22.22, false, 4, 2, 0, 14.69, 2.36, 4.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 14, 'AXM478', 31.60, 0.50, 22.02, false, 10, 14, 2, 13.84, 1.82, 6.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 18, 'AXM478', 30.93, 0.48, 22.13, false, 17, 9, 3, 8.93, 2.45, 6.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 2, 'AXM478', 27.66, 0.51, 22.08, false, 45, 6, 4, 9.35, 2.31, 7.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 6, 'AXM478', 30.75, 0.49, 22.37, false, 33, 18, 5, 19.02, 2.50, 8.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 10, 'AXM478', 31.09, 0.51, 22.21, false, 14, 16, 2, 8.35, 2.91, 5.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 14, 'AXM478', 29.44, 0.48, 22.43, false, 5, 8, 3, 15.06, 2.41, 14.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 18, 'AXM478', 30.94, 0.47, 22.13, false, 34, 19, 2, 14.56, 2.57, 11.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 2, 'AXM478', 32.38, 0.50, 22.02, false, 25, 9, 4, 9.71, 2.59, 3.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 6, 'AXM478', 30.70, 0.51, 22.50, false, 14, 15, 3, 13.83, 2.21, 3.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 10, 'AXM478', 30.48, 0.50, 22.40, false, 23, 20, 3, 13.78, 2.54, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 14, 'AXM478', 33.62, 0.51, 22.47, false, 22, 13, 2, 10.29, 2.63, 5.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 18, 'AXM478', 29.78, 0.52, 22.25, false, 16, 11, 5, 18.83, 2.53, 9.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 8, 'AXM480', 27.64, 0.50, 22.36, false, 31, 20, 2, 16.77, 2.42, 2.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 12, 'AXM480', 32.17, 0.48, 22.34, false, 14, 16, 2, 15.62, 2.72, 5.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 16, 'AXM480', 31.76, 0.49, 22.08, false, 12, 20, 3, 7.90, 2.53, 2.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 20, 'AXM480', 31.28, 0.48, 22.21, false, 9, 12, 1, 7.64, 2.63, 2.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 4, 'AXM480', 30.36, 0.49, 22.45, false, 9, 10, 1, 7.37, 3.03, 5.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 8, 'AXM480', 30.65, 0.49, 22.01, false, 6, 12, 3, 18.51, 2.73, 6.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 12, 'AXM480', 31.68, 0.51, 22.03, false, 8, 7, 4, 17.54, 1.86, 1.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 16, 'AXM480', 30.60, 0.50, 22.49, false, 2, 4, 2, 10.87, 1.98, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 20, 'AXM480', 32.09, 0.49, 22.08, false, 8, 15, 3, 16.91, 2.57, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 4, 'AXM480', 34.09, 0.51, 22.25, false, 21, 18, 5, 17.49, 2.77, 15.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 8, 'AXM480', 31.47, 0.51, 22.14, false, 17, 9, 2, 10.15, 3.14, 7.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 12, 'AXM480', 26.93, 0.51, 22.21, false, 7, 8, 3, 15.07, 1.89, 2.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 16, 'AXM480', 29.29, 0.52, 22.17, false, 23, 12, 3, 11.54, 2.71, 4.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 20, 'AXM480', 29.28, 0.51, 22.40, false, 34, 20, 7, 8.52, 2.58, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 3, 'AXM479', 23.94, 0.99, 20.28, false, 12, 6, 0, 14.20, 2.01, 7.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 7, 'AXM479', 24.36, 1.00, 20.26, false, 16, 20, 2, 11.22, 1.98, 4.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 11, 'AXM479', 23.73, 1.00, 21.94, false, 2, 12, 0, 7.62, 1.82, 5.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 15, 'AXM479', 24.18, 0.99, 21.34, false, 12, 13, 1, 13.33, 2.49, 5.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 19, 'AXM479', 24.29, 1.00, 20.85, false, 7, 8, 0, 18.89, 2.42, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 3, 'AXM479', 23.62, 1.03, 21.57, false, 52, 19, 7, 14.20, 1.67, 9.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 7, 'AXM479', 24.05, 0.98, 21.53, false, 1, 3, 0, 7.80, 2.18, 4.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 11, 'AXM479', 24.24, 0.99, 20.31, false, 5, 11, 1, 7.41, 2.44, 6.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 15, 'AXM479', 24.44, 1.02, 21.18, false, 8, 4, 1, 12.48, 2.41, 11.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 19, 'AXM479', 24.20, 1.01, 20.45, false, 8, 5, 2, 18.34, 2.23, 13.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 3, 'AXM479', 23.60, 1.00, 20.38, false, 28, 13, 5, 14.20, 1.67, 12.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 7, 'AXM479', 24.39, 1.02, 21.37, false, 9, 7, 1, 9.26, 1.60, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 3, 'AXM479', 24.03, 10.11, 24.54, false, 52, 20, 7, 14.22, 2.04, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 2, 'AXM478', 23.56, 1.00, 20.53, false, 12, 16, 2, 9.20, 1.63, 5.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 6, 'AXM478', 23.95, 1.00, 21.06, false, 1, 1, 0, 16.01, 1.68, 9.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 10, 'AXM478', 24.07, 1.02, 21.42, false, 20, 10, 3, 8.26, 1.97, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 14, 'AXM478', 24.45, 0.99, 21.22, false, 8, 7, 1, 11.85, 2.28, 10.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 18, 'AXM478', 23.82, 1.03, 20.78, false, 5, 8, 1, 8.30, 2.09, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 2, 'AXM478', 23.56, 0.97, 21.26, false, 25, 3, 1, 9.20, 1.59, 1.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 6, 'AXM478', 24.06, 0.99, 21.20, false, 21, 19, 4, 17.70, 2.45, 6.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 10, 'AXM478', 23.55, 0.98, 21.23, false, 4, 5, 0, 19.87, 2.28, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 14, 'AXM478', 23.92, 1.00, 20.76, false, 10, 15, 0, 8.03, 2.43, 6.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 18, 'AXM478', 24.14, 1.00, 21.22, false, 5, 4, 0, 11.43, 2.11, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 2, 'AXM478', 24.11, 0.99, 20.74, false, 38, 20, 3, 9.20, 2.23, 8.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 6, 'AXM478', 24.03, 1.00, 21.06, false, 20, 11, 1, 12.88, 1.87, 12.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 4, 'AXM480', 23.84, 0.98, 21.27, false, 33, 19, 4, 10.91, 2.30, 2.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 8, 'AXM480', 23.73, 1.01, 20.62, false, 23, 13, 2, 7.41, 2.06, 2.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 12, 'AXM480', 23.74, 1.02, 21.37, false, 33, 20, 2, 16.64, 1.53, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 16, 'AXM480', 24.32, 0.97, 20.14, false, 19, 19, 3, 8.79, 2.00, 7.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 20, 'AXM480', 23.59, 1.01, 20.33, false, 1, 19, 0, 9.17, 1.52, 7.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 4, 'AXM480', 23.63, 0.97, 21.82, false, 0, 2, 0, 9.72, 1.94, 3.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 8, 'AXM480', 23.58, 1.00, 20.81, false, 20, 19, 2, 8.97, 1.72, 4.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 12, 'AXM480', 23.69, 0.98, 21.60, false, 3, 11, 1, 8.43, 1.86, 5.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 16, 'AXM480', 23.85, 1.02, 21.50, false, 10, 7, 2, 11.72, 2.25, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 20, 'AXM480', 23.53, 1.01, 20.90, false, 9, 7, 0, 7.97, 2.09, 4.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 4, 'AXM480', 23.80, 0.98, 21.01, false, 1, 1, 0, 9.66, 1.77, 2.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 11, 'AXM479', 24.39, 0.99, 21.47, false, 0, 3, 0, 19.84, 2.07, 9.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 15, 'AXM479', 23.85, 1.00, 20.70, false, 4, 14, 1, 10.21, 1.98, 2.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 19, 'AXM479', 24.23, 0.99, 21.86, false, 4, 19, 1, 19.53, 2.21, 4.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 3, 'AXM479', 26.98, 10.11, 25.04, false, 14, 7, 1, 14.26, 2.15, 7.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 7, 'AXM479', 25.91, 10.25, 24.05, false, 16, 20, 2, 11.24, 1.98, 4.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 11, 'AXM479', 24.69, 10.44, 24.02, false, 3, 12, 0, 7.65, 1.85, 5.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 15, 'AXM479', 27.34, 9.78, 25.26, false, 12, 13, 2, 13.38, 2.50, 5.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 19, 'AXM479', 27.36, 10.32, 24.46, false, 8, 8, 0, 19.03, 2.74, 4.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 12, 'AXM480', 23.87, 0.98, 20.07, false, 1, 4, 0, 19.10, 1.69, 2.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 14, 'AXM478', 23.64, 0.99, 20.84, false, 11, 6, 1, 19.11, 1.96, 4.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 18, 'AXM478', 24.25, 0.97, 20.57, false, 6, 12, 0, 8.00, 2.29, 6.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 2, 'AXM478', 26.31, 9.97, 25.34, false, 12, 16, 3, 9.33, 1.67, 5.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 6, 'AXM478', 26.00, 9.87, 25.03, false, 2, 1, 1, 16.08, 1.79, 9.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 10, 'AXM478', 25.19, 9.83, 24.19, false, 20, 10, 3, 8.32, 2.23, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 14, 'AXM478', 28.28, 10.04, 24.38, false, 9, 8, 1, 11.91, 2.52, 10.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 18, 'AXM478', 26.88, 9.78, 25.87, false, 5, 9, 2, 8.48, 2.25, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 2, 'AXM478', 25.18, 10.44, 24.70, false, 25, 4, 1, 9.30, 1.68, 1.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 16, 'AXM480', 24.45, 1.03, 21.50, false, 9, 11, 1, 12.42, 2.28, 8.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 20, 'AXM480', 23.51, 1.01, 20.88, false, 0, 0, 0, 10.18, 1.72, 5.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 4, 'AXM480', 26.36, 9.86, 25.38, false, 34, 20, 5, 10.99, 2.59, 2.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 8, 'AXM480', 23.78, 9.80, 25.39, false, 25, 14, 3, 7.42, 2.08, 2.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 12, 'AXM480', 24.78, 10.26, 26.00, false, 33, 20, 3, 16.81, 1.83, 7.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 16, 'AXM480', 27.38, 9.89, 24.44, false, 19, 19, 3, 8.84, 2.28, 7.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 20, 'AXM480', 24.35, 9.71, 24.93, false, 2, 19, 0, 9.25, 1.63, 7.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 4, 'AXM480', 25.38, 10.43, 24.28, false, 2, 2, 0, 9.83, 2.21, 3.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 7, 'AXM479', 24.06, 10.44, 24.92, false, 1, 3, 0, 7.98, 2.25, 4.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 11, 'AXM479', 28.04, 10.44, 24.91, false, 6, 12, 1, 7.55, 2.44, 6.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 15, 'AXM479', 27.18, 10.21, 24.91, false, 9, 5, 1, 12.62, 2.81, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 19, 'AXM479', 24.93, 9.56, 24.68, false, 9, 5, 2, 18.49, 2.53, 13.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 3, 'AXM479', 26.96, 9.98, 24.62, false, 28, 13, 6, 14.38, 1.80, 12.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 7, 'AXM479', 25.99, 10.11, 25.05, false, 9, 7, 1, 9.36, 1.86, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 11, 'AXM479', 26.16, 10.04, 24.24, false, 2, 3, 0, 20.02, 2.21, 9.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 15, 'AXM479', 27.01, 10.26, 25.58, false, 5, 15, 2, 10.29, 2.26, 2.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 19, 'AXM479', 28.22, 9.77, 24.20, false, 6, 20, 2, 19.66, 2.59, 4.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 8, 'AXM480', 26.23, 9.92, 24.50, false, 20, 19, 2, 9.03, 1.84, 4.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 6, 'AXM478', 26.13, 9.62, 25.23, false, 21, 20, 4, 17.80, 2.84, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 10, 'AXM478', 25.91, 9.96, 24.35, false, 4, 6, 0, 20.00, 2.65, 5.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 14, 'AXM478', 27.87, 9.54, 24.57, false, 11, 15, 1, 8.22, 2.75, 6.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 18, 'AXM478', 25.61, 10.23, 24.28, false, 7, 4, 0, 11.45, 2.16, 6.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 2, 'AXM478', 26.02, 9.58, 25.71, false, 39, 20, 4, 9.27, 2.36, 8.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 6, 'AXM478', 27.24, 10.11, 25.65, false, 21, 12, 2, 13.00, 2.12, 12.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 10, 'AXM478', 26.01, 10.08, 25.45, false, 14, 11, 3, 9.28, 1.75, 2.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 14, 'AXM478', 26.15, 9.70, 25.50, false, 11, 7, 2, 19.29, 2.25, 4.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 18, 'AXM478', 24.84, 10.15, 25.19, false, 8, 13, 1, 8.06, 2.33, 6.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 12, 'AXM480', 24.08, 9.52, 25.29, false, 5, 11, 2, 8.46, 2.19, 5.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 16, 'AXM480', 25.39, 9.98, 24.04, false, 10, 7, 3, 11.86, 2.59, 5.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 20, 'AXM480', 24.07, 10.11, 24.15, false, 10, 8, 1, 8.02, 2.24, 4.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 4, 'AXM480', 25.39, 9.52, 25.61, false, 1, 1, 0, 9.76, 1.89, 2.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 8, 'AXM480', 24.78, 10.23, 26.02, false, 3, 12, 0, 9.76, 2.02, 4.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 12, 'AXM480', 23.95, 10.23, 24.64, false, 2, 5, 1, 19.13, 2.05, 2.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 16, 'AXM480', 26.01, 9.71, 25.85, false, 9, 12, 1, 12.43, 2.62, 8.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 20, 'AXM480', 26.00, 9.95, 25.04, false, 0, 0, 1, 10.24, 1.96, 5.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 3, 'AXM479', 29.52, 8.64, 26.24, false, 14, 7, 2, 14.34, 2.49, 7.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 7, 'AXM479', 28.99, 8.11, 26.89, false, 17, 20, 2, 11.29, 2.27, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 11, 'AXM479', 25.20, 8.28, 26.11, false, 5, 12, 0, 7.77, 1.86, 5.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 15, 'AXM479', 29.08, 8.65, 27.28, false, 13, 14, 3, 13.54, 2.80, 5.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 19, 'AXM479', 28.97, 7.53, 26.15, false, 8, 8, 1, 19.20, 2.91, 4.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 3, 'AXM479', 24.99, 8.69, 26.60, false, 53, 20, 8, 14.27, 2.06, 9.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 7, 'AXM479', 25.59, 8.92, 27.13, false, 2, 4, 0, 8.06, 2.40, 4.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 11, 'AXM479', 30.49, 8.89, 26.90, false, 8, 13, 2, 7.70, 2.77, 6.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 15, 'AXM479', 27.97, 8.18, 26.86, false, 11, 6, 2, 12.75, 3.01, 11.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 19, 'AXM479', 26.77, 8.91, 27.08, false, 11, 6, 2, 18.67, 2.89, 13.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 3, 'AXM479', 28.21, 8.26, 26.74, false, 29, 13, 6, 14.50, 2.20, 12.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 7, 'AXM479', 27.57, 7.04, 26.03, false, 10, 7, 1, 9.47, 2.26, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 11, 'AXM479', 27.57, 8.96, 26.33, false, 2, 3, 1, 20.11, 2.42, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 15, 'AXM479', 29.36, 8.64, 26.39, false, 7, 16, 2, 10.45, 2.63, 2.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 19, 'AXM479', 32.21, 8.67, 26.55, false, 6, 20, 3, 19.68, 2.77, 4.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 4, 'AXM480', 27.51, 8.56, 26.15, false, 34, 20, 5, 11.10, 2.91, 2.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 2, 'AXM478', 29.33, 7.20, 26.71, false, 12, 17, 4, 9.44, 2.05, 5.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 6, 'AXM478', 28.00, 8.93, 26.81, false, 2, 1, 2, 16.28, 1.92, 9.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 10, 'AXM478', 27.24, 7.82, 26.85, false, 22, 10, 4, 8.41, 2.49, 7.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 14, 'AXM478', 29.78, 7.17, 26.90, false, 9, 9, 1, 12.01, 2.81, 10.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 18, 'AXM478', 29.23, 8.20, 27.40, false, 7, 10, 2, 8.58, 2.55, 5.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 2, 'AXM478', 27.46, 8.42, 26.18, false, 25, 4, 1, 9.45, 1.84, 1.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 6, 'AXM478', 27.02, 8.54, 26.57, false, 23, 20, 4, 17.82, 2.96, 6.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 10, 'AXM478', 28.40, 7.75, 26.05, false, 6, 7, 0, 20.16, 3.02, 5.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 14, 'AXM478', 29.13, 7.92, 26.38, false, 12, 16, 1, 8.29, 3.09, 6.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 18, 'AXM478', 27.96, 8.14, 26.80, false, 8, 5, 1, 11.54, 2.26, 6.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 2, 'AXM478', 28.85, 7.20, 27.14, false, 39, 20, 5, 9.33, 2.56, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 6, 'AXM478', 30.73, 8.91, 26.23, false, 21, 13, 2, 13.20, 2.32, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 10, 'AXM478', 26.44, 7.42, 26.01, false, 14, 12, 4, 9.32, 1.83, 2.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 14, 'AXM478', 27.84, 7.06, 26.72, false, 11, 8, 3, 19.29, 2.31, 4.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 18, 'AXM478', 25.73, 8.12, 26.17, false, 9, 14, 2, 8.17, 2.38, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 8, 'AXM480', 25.95, 8.52, 27.41, false, 27, 15, 3, 7.49, 2.14, 2.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 12, 'AXM480', 26.96, 7.62, 26.66, false, 35, 20, 4, 16.90, 2.20, 7.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 16, 'AXM480', 30.54, 8.69, 27.14, false, 20, 20, 3, 9.03, 2.52, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 20, 'AXM480', 26.66, 8.74, 27.69, false, 4, 20, 1, 9.32, 1.74, 7.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 4, 'AXM480', 25.76, 7.58, 26.36, false, 3, 3, 0, 10.00, 2.53, 3.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 8, 'AXM480', 26.62, 7.39, 26.06, false, 20, 20, 2, 9.11, 1.85, 4.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 12, 'AXM480', 26.14, 8.05, 26.64, false, 6, 11, 3, 8.59, 2.26, 5.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 16, 'AXM480', 25.47, 8.06, 27.01, false, 10, 7, 3, 11.88, 2.61, 5.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 20, 'AXM480', 26.97, 7.18, 26.25, false, 10, 9, 1, 8.19, 2.28, 4.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 4, 'AXM480', 25.75, 7.80, 26.31, false, 2, 1, 1, 9.92, 2.27, 2.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 8, 'AXM480', 28.66, 7.80, 26.40, false, 5, 13, 1, 9.79, 2.13, 4.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 12, 'AXM480', 24.82, 8.65, 26.78, false, 4, 5, 2, 19.32, 2.09, 3.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 16, 'AXM480', 28.74, 8.90, 26.72, false, 11, 12, 2, 12.58, 2.73, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 20, 'AXM480', 28.77, 7.83, 26.81, false, 2, 1, 1, 10.42, 2.23, 5.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 3, 'AXM479', 31.95, 0.48, 22.15, false, 15, 8, 3, 14.46, 2.70, 8.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 7, 'AXM479', 30.70, 0.50, 22.43, false, 19, 20, 2, 11.37, 2.51, 4.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 11, 'AXM479', 28.53, 0.51, 22.35, false, 6, 13, 1, 7.93, 2.00, 5.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 15, 'AXM479', 29.44, 0.52, 22.06, false, 15, 14, 3, 13.69, 2.81, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 19, 'AXM479', 29.88, 0.52, 22.04, false, 10, 8, 1, 19.40, 3.18, 4.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 3, 'AXM479', 26.11, 0.48, 22.38, false, 54, 20, 9, 14.28, 2.31, 9.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 7, 'AXM479', 26.14, 0.49, 22.32, false, 3, 5, 0, 8.23, 2.56, 4.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 11, 'AXM479', 33.03, 0.50, 22.36, false, 9, 14, 3, 7.88, 2.99, 6.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 15, 'AXM479', 30.35, 0.48, 22.10, false, 13, 7, 2, 12.90, 3.37, 11.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 19, 'AXM479', 27.35, 0.52, 22.28, false, 11, 7, 3, 18.67, 2.98, 13.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 3, 'AXM479', 28.60, 0.51, 22.19, false, 29, 14, 7, 14.60, 2.31, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 7, 'AXM479', 28.70, 0.51, 22.08, false, 11, 8, 1, 9.59, 2.44, 4.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 3, 'AXM479', 24.01, 0.98, 21.63, false, 58, 17, 0, 13.32, 4.48, 7.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 2, 'AXM478', 33.18, 0.48, 22.02, false, 14, 17, 5, 9.55, 2.20, 5.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 6, 'AXM478', 30.63, 0.49, 22.45, false, 2, 2, 2, 16.31, 2.00, 9.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 10, 'AXM478', 27.68, 0.52, 22.31, false, 22, 10, 4, 8.60, 2.69, 7.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 14, 'AXM478', 29.89, 0.53, 22.10, false, 9, 10, 1, 12.01, 2.93, 10.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 18, 'AXM478', 30.29, 0.47, 22.09, false, 8, 11, 2, 8.67, 2.92, 5.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 2, 'AXM478', 28.78, 0.51, 22.37, false, 25, 5, 2, 9.53, 2.01, 2.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 6, 'AXM478', 30.28, 0.52, 22.53, false, 25, 20, 5, 17.90, 3.02, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 10, 'AXM478', 32.13, 0.51, 22.31, false, 8, 8, 1, 20.18, 3.38, 5.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 14, 'AXM478', 29.51, 0.47, 22.32, false, 12, 16, 2, 8.45, 3.33, 6.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 18, 'AXM478', 29.37, 0.52, 22.06, false, 8, 6, 1, 11.72, 2.62, 6.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 2, 'AXM478', 32.15, 0.51, 22.32, false, 40, 20, 5, 9.35, 2.75, 9.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 6, 'AXM478', 33.20, 0.49, 22.13, false, 22, 14, 3, 13.33, 2.53, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 4, 'AXM480', 30.41, 0.52, 22.02, false, 35, 20, 5, 11.25, 3.11, 3.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 8, 'AXM480', 28.26, 0.51, 22.40, false, 27, 16, 3, 7.54, 2.48, 2.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 12, 'AXM480', 30.24, 0.52, 22.17, false, 36, 20, 4, 16.97, 2.41, 7.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 16, 'AXM480', 31.49, 0.49, 22.32, false, 20, 20, 3, 9.10, 2.71, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 20, 'AXM480', 29.57, 0.52, 22.42, false, 4, 20, 1, 9.39, 1.87, 7.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 4, 'AXM480', 27.95, 0.49, 22.40, false, 4, 3, 0, 10.07, 2.78, 3.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 8, 'AXM480', 29.91, 0.51, 22.40, false, 22, 20, 3, 9.15, 2.05, 4.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 12, 'AXM480', 26.60, 0.51, 22.48, false, 7, 12, 4, 8.75, 2.40, 5.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 16, 'AXM480', 26.76, 0.51, 22.44, false, 12, 7, 3, 11.93, 2.94, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 20, 'AXM480', 30.51, 0.52, 22.15, false, 12, 9, 2, 8.26, 2.42, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 4, 'AXM480', 26.48, 0.51, 22.05, false, 2, 2, 1, 9.94, 2.56, 2.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 11, 'AXM479', 30.49, 0.48, 22.33, false, 4, 4, 1, 20.26, 2.55, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 15, 'AXM479', 32.70, 0.52, 22.01, false, 9, 16, 3, 10.49, 2.65, 2.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 19, 'AXM479', 33.48, 0.51, 22.26, false, 8, 20, 3, 19.86, 2.92, 4.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 3, 'AXM479', 24.27, 1.00, 20.73, false, 41, 20, 1, 18.34, 3.75, 6.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 7, 'AXM479', 23.53, 1.02, 20.02, false, 42, 12, 2, 11.85, 3.72, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 11, 'AXM479', 23.64, 1.03, 21.54, false, 71, 20, 11, 12.60, 3.82, 5.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 15, 'AXM479', 23.59, 1.03, 21.12, false, 17, 5, 1, 16.20, 4.23, 14.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 19, 'AXM479', 24.10, 1.00, 21.42, false, 28, 9, 4, 14.89, 4.24, 8.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 12, 'AXM480', 25.12, 0.49, 22.47, false, 6, 5, 3, 19.41, 2.25, 3.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 14, 'AXM478', 28.62, 0.47, 22.24, false, 12, 8, 3, 19.39, 2.31, 4.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 18, 'AXM478', 26.71, 0.52, 22.09, false, 9, 15, 2, 8.32, 2.70, 6.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 2, 'AXM478', 23.52, 0.99, 20.09, false, 68, 18, 10, 20.04, 3.61, 5.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 6, 'AXM478', 23.79, 1.02, 21.46, false, 43, 17, 3, 13.44, 3.84, 11.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 10, 'AXM478', 23.74, 1.03, 21.59, false, 48, 14, 8, 13.40, 3.64, 9.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 14, 'AXM478', 23.94, 0.97, 20.44, false, 45, 15, 4, 18.27, 4.22, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 18, 'AXM478', 24.01, 1.00, 20.89, false, 40, 19, 8, 16.87, 4.19, 5.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 2, 'AXM478', 24.28, 1.02, 21.40, false, 56, 16, 1, 21.81, 3.78, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 16, 'AXM480', 30.32, 0.47, 22.38, false, 12, 13, 3, 12.74, 2.78, 8.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 20, 'AXM480', 32.52, 0.50, 22.36, false, 2, 1, 2, 10.45, 2.28, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 4, 'AXM480', 23.59, 0.98, 21.81, false, 71, 20, 11, 18.17, 3.60, 5.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 8, 'AXM480', 23.55, 1.01, 21.85, false, 42, 20, 2, 17.56, 4.25, 11.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 12, 'AXM480', 23.53, 0.98, 20.46, false, 55, 14, 2, 21.10, 3.61, 17.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 16, 'AXM480', 23.52, 1.01, 21.97, false, 20, 8, 2, 11.86, 3.53, 10.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 20, 'AXM480', 23.51, 1.02, 21.29, false, 15, 4, 1, 16.11, 4.35, 15.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 4, 'AXM480', 23.62, 0.98, 20.17, false, 50, 14, 5, 9.16, 3.71, 6.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 7, 'AXM479', 24.19, 0.99, 20.59, false, 13, 5, 0, 13.05, 3.86, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 11, 'AXM479', 24.48, 0.97, 21.43, false, 19, 5, 2, 21.13, 4.04, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 15, 'AXM479', 23.67, 1.01, 20.00, false, 28, 11, 4, 10.17, 4.08, 10.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 19, 'AXM479', 23.75, 1.02, 21.17, false, 49, 13, 8, 18.17, 4.49, 17.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 3, 'AXM479', 23.92, 1.01, 20.55, false, 29, 10, 5, 19.46, 3.52, 6.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 7, 'AXM479', 23.60, 0.97, 21.27, false, 22, 9, 0, 10.72, 4.46, 4.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 11, 'AXM479', 23.71, 1.01, 21.98, false, 33, 13, 3, 12.05, 3.56, 11.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 15, 'AXM479', 24.13, 0.98, 21.91, false, 19, 5, 2, 17.63, 3.63, 17.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 19, 'AXM479', 24.32, 1.01, 20.66, false, 12, 4, 2, 21.51, 3.97, 14.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 8, 'AXM480', 23.92, 1.02, 20.72, false, 27, 9, 5, 9.69, 3.63, 3.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 6, 'AXM478', 24.01, 1.00, 20.41, false, 10, 5, 1, 12.19, 4.10, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 10, 'AXM478', 24.08, 1.00, 20.37, false, 50, 14, 9, 13.22, 3.78, 9.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 14, 'AXM478', 24.17, 1.00, 21.24, false, 17, 5, 1, 20.08, 3.93, 8.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 18, 'AXM478', 24.41, 0.99, 21.56, false, 47, 20, 4, 21.55, 4.47, 13.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 2, 'AXM478', 24.11, 1.00, 21.38, false, 51, 16, 7, 21.08, 4.48, 18.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 6, 'AXM478', 24.02, 0.99, 20.42, false, 40, 20, 6, 20.30, 3.56, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 10, 'AXM478', 24.23, 1.00, 20.90, false, 38, 17, 5, 20.66, 3.99, 10.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 14, 'AXM478', 23.62, 1.00, 21.53, false, 57, 18, 3, 17.74, 4.44, 8.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 18, 'AXM478', 23.73, 1.00, 21.90, false, 64, 20, 1, 9.41, 4.38, 4.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 12, 'AXM480', 23.91, 1.00, 20.30, false, 17, 5, 3, 12.44, 4.32, 11.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 16, 'AXM480', 24.32, 1.00, 20.63, false, 57, 20, 10, 9.48, 4.45, 7.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 20, 'AXM480', 23.83, 1.02, 20.53, false, 41, 14, 7, 9.08, 4.13, 7.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 4, 'AXM480', 24.13, 1.02, 20.71, false, 71, 20, 8, 19.35, 3.51, 17.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 8, 'AXM480', 23.61, 1.00, 20.41, false, 31, 13, 5, 14.11, 3.91, 12.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 12, 'AXM480', 23.86, 1.01, 20.76, false, 42, 19, 3, 19.12, 4.13, 7.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 16, 'AXM480', 23.60, 0.99, 20.76, false, 46, 13, 9, 12.69, 4.10, 5.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 20, 'AXM480', 24.10, 1.02, 20.45, false, 61, 20, 7, 19.24, 4.32, 4.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 3, 'AXM479', 24.88, 9.53, 24.93, false, 42, 20, 2, 18.52, 3.79, 6.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 7, 'AXM479', 24.62, 9.85, 25.47, false, 44, 13, 2, 11.96, 3.81, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 11, 'AXM479', 26.30, 10.26, 24.31, false, 73, 20, 12, 12.73, 3.85, 5.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 15, 'AXM479', 25.76, 9.91, 25.00, false, 19, 6, 1, 16.22, 4.27, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 19, 'AXM479', 26.23, 9.84, 25.26, false, 30, 10, 4, 15.06, 4.58, 8.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 3, 'AXM479', 26.28, 10.34, 25.83, false, 58, 17, 0, 13.34, 4.77, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 7, 'AXM479', 25.05, 10.27, 24.77, false, 14, 6, 0, 13.24, 4.12, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 11, 'AXM479', 26.72, 9.55, 25.13, false, 19, 6, 3, 21.28, 4.34, 5.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 15, 'AXM479', 25.70, 9.84, 25.51, false, 29, 11, 5, 10.36, 4.09, 10.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 19, 'AXM479', 27.35, 10.23, 25.46, false, 49, 14, 8, 18.20, 4.74, 17.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 3, 'AXM479', 24.21, 9.91, 24.02, false, 31, 10, 5, 19.60, 3.73, 6.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 7, 'AXM479', 24.96, 10.26, 25.83, false, 22, 9, 0, 10.88, 4.49, 4.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 11, 'AXM479', 27.25, 10.33, 24.56, false, 35, 14, 3, 12.10, 3.82, 11.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 15, 'AXM479', 27.51, 10.32, 25.89, false, 20, 5, 3, 17.78, 3.94, 17.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 19, 'AXM479', 25.94, 9.78, 25.54, false, 13, 4, 2, 21.65, 4.28, 14.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 4, 'AXM480', 24.03, 9.98, 25.34, false, 72, 20, 11, 18.19, 3.87, 5.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 2, 'AXM478', 27.41, 10.07, 24.49, false, 68, 18, 11, 20.11, 3.98, 6.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 6, 'AXM478', 25.34, 9.55, 25.52, false, 43, 17, 4, 13.56, 4.21, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 10, 'AXM478', 23.93, 9.64, 25.75, false, 49, 15, 9, 13.46, 3.85, 9.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 14, 'AXM478', 27.69, 9.54, 25.76, false, 45, 16, 5, 18.44, 4.40, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 18, 'AXM478', 25.70, 10.39, 24.58, false, 40, 20, 8, 16.97, 4.23, 5.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 2, 'AXM478', 25.55, 10.09, 25.54, false, 56, 17, 2, 22.01, 4.06, 15.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 6, 'AXM478', 25.66, 9.64, 24.01, false, 11, 6, 1, 12.32, 4.24, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 10, 'AXM478', 25.47, 10.44, 25.31, false, 50, 15, 9, 13.29, 3.89, 9.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 14, 'AXM478', 25.91, 9.59, 24.66, false, 18, 6, 1, 20.13, 4.28, 8.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 18, 'AXM478', 24.72, 10.25, 24.80, false, 48, 20, 4, 21.60, 4.58, 13.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 2, 'AXM478', 25.20, 9.74, 25.42, false, 53, 17, 7, 21.13, 4.50, 18.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 6, 'AXM478', 25.42, 9.72, 25.36, false, 42, 20, 6, 20.33, 3.90, 9.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 10, 'AXM478', 24.33, 9.79, 25.27, false, 40, 18, 6, 20.73, 4.09, 10.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 14, 'AXM478', 23.81, 10.38, 24.35, false, 57, 18, 4, 17.78, 4.56, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 18, 'AXM478', 24.58, 10.36, 25.78, false, 65, 20, 1, 9.42, 4.54, 4.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 8, 'AXM480', 25.99, 9.67, 24.19, false, 42, 20, 3, 17.74, 4.29, 11.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 12, 'AXM480', 26.47, 10.01, 24.36, false, 56, 15, 3, 21.23, 3.83, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 16, 'AXM480', 27.17, 9.82, 24.08, false, 20, 9, 3, 11.93, 3.62, 10.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 20, 'AXM480', 26.81, 10.44, 25.59, false, 17, 5, 2, 16.29, 4.75, 15.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 4, 'AXM480', 24.26, 10.30, 24.74, false, 51, 14, 6, 9.33, 3.77, 6.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 8, 'AXM480', 24.38, 9.90, 25.88, false, 27, 9, 5, 9.86, 3.86, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 12, 'AXM480', 24.35, 10.49, 24.06, false, 19, 5, 4, 12.57, 4.41, 11.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 16, 'AXM480', 25.75, 10.30, 24.50, false, 58, 20, 10, 9.61, 4.57, 7.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 20, 'AXM480', 26.93, 10.46, 25.07, false, 41, 14, 7, 9.17, 4.28, 7.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 4, 'AXM480', 28.08, 10.29, 25.83, false, 72, 20, 9, 19.54, 3.67, 17.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 8, 'AXM480', 27.40, 10.06, 25.22, false, 31, 13, 6, 14.30, 4.09, 12.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 12, 'AXM480', 26.41, 9.54, 25.17, false, 42, 19, 3, 19.31, 4.49, 7.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 16, 'AXM480', 24.69, 10.03, 25.24, false, 46, 14, 10, 12.86, 4.46, 5.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 20, 'AXM480', 27.85, 10.38, 25.09, false, 63, 20, 8, 19.32, 4.51, 4.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 3, 'AXM479', 27.17, 8.33, 26.37, false, 44, 20, 2, 18.55, 3.82, 6.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 7, 'AXM479', 26.02, 8.40, 26.54, false, 46, 14, 3, 12.13, 4.18, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 11, 'AXM479', 27.41, 8.00, 26.59, false, 75, 20, 13, 12.82, 4.13, 5.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 15, 'AXM479', 26.91, 8.93, 26.52, false, 19, 7, 2, 16.35, 4.64, 14.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 19, 'AXM479', 28.02, 7.73, 26.71, false, 32, 11, 5, 15.18, 4.60, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 3, 'AXM479', 29.36, 8.50, 27.28, false, 58, 18, 0, 13.44, 4.82, 7.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 7, 'AXM479', 28.26, 7.06, 26.77, false, 14, 7, 0, 13.26, 4.21, 11.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 11, 'AXM479', 27.97, 7.08, 27.10, false, 19, 6, 3, 21.33, 4.73, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 15, 'AXM479', 25.75, 8.83, 26.26, false, 30, 11, 5, 10.44, 4.45, 10.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 19, 'AXM479', 30.98, 7.06, 26.88, false, 50, 14, 8, 18.31, 4.93, 17.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 3, 'AXM479', 24.45, 7.80, 26.23, false, 33, 10, 5, 19.72, 3.80, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 7, 'AXM479', 25.67, 8.27, 26.34, false, 24, 10, 0, 11.00, 4.87, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 3, 'AXM479', 31.27, 0.52, 22.10, false, 58, 19, 0, 13.53, 5.18, 7.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 2, 'AXM478', 28.41, 7.10, 26.82, false, 70, 18, 11, 20.22, 4.23, 6.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 6, 'AXM478', 29.09, 8.63, 26.35, false, 43, 18, 5, 13.67, 4.30, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 10, 'AXM478', 27.59, 8.78, 27.55, false, 51, 16, 9, 13.58, 4.06, 9.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 14, 'AXM478', 28.36, 8.76, 26.63, false, 46, 17, 5, 18.47, 4.68, 16.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 18, 'AXM478', 28.25, 7.87, 26.75, false, 40, 20, 8, 17.11, 4.24, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 2, 'AXM478', 25.81, 8.02, 26.86, false, 58, 17, 2, 22.14, 4.13, 15.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 6, 'AXM478', 26.88, 8.54, 27.21, false, 13, 6, 1, 12.38, 4.26, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 10, 'AXM478', 25.63, 7.28, 26.45, false, 51, 15, 9, 13.44, 4.13, 9.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 14, 'AXM478', 26.64, 8.51, 26.88, false, 19, 7, 2, 20.32, 4.28, 8.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 18, 'AXM478', 26.11, 8.93, 26.82, false, 50, 20, 5, 21.68, 4.94, 13.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 2, 'AXM478', 28.81, 7.23, 26.57, false, 53, 17, 8, 21.27, 4.81, 18.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 6, 'AXM478', 27.12, 7.85, 26.77, false, 43, 20, 6, 20.53, 4.07, 9.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 4, 'AXM480', 27.91, 8.19, 26.27, false, 72, 20, 12, 18.35, 4.21, 5.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 8, 'AXM480', 26.74, 7.49, 26.57, false, 44, 20, 3, 17.85, 4.30, 11.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 12, 'AXM480', 29.34, 7.38, 27.17, false, 58, 15, 3, 21.31, 3.99, 17.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 16, 'AXM480', 30.89, 7.47, 27.06, false, 21, 9, 4, 12.04, 3.86, 10.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 20, 'AXM480', 27.45, 7.38, 26.20, false, 18, 5, 2, 16.32, 4.92, 15.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 4, 'AXM480', 26.69, 8.55, 26.53, false, 53, 14, 6, 9.37, 3.81, 6.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 8, 'AXM480', 25.59, 8.62, 26.13, false, 29, 9, 5, 9.94, 3.88, 4.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 12, 'AXM480', 25.21, 7.51, 26.10, false, 19, 6, 4, 12.64, 4.65, 11.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 16, 'AXM480', 27.51, 7.50, 26.28, false, 60, 20, 11, 9.78, 4.92, 7.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 20, 'AXM480', 27.68, 8.05, 27.26, false, 42, 14, 8, 9.33, 4.45, 7.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 4, 'AXM480', 31.59, 7.63, 27.06, false, 74, 20, 10, 19.54, 3.69, 18.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 11, 'AXM479', 29.08, 7.07, 26.61, false, 36, 14, 4, 12.14, 4.21, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 15, 'AXM479', 27.89, 7.75, 26.40, false, 20, 6, 4, 17.91, 4.22, 17.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 19, 'AXM479', 29.30, 8.14, 27.40, false, 13, 5, 3, 21.70, 4.47, 14.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 3, 'AXM479', 29.58, 0.48, 22.27, false, 45, 20, 2, 18.67, 4.17, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 7, 'AXM479', 26.79, 0.52, 22.15, false, 47, 14, 3, 12.33, 4.50, 4.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 11, 'AXM479', 29.97, 0.51, 22.07, false, 77, 20, 14, 12.98, 4.37, 5.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 15, 'AXM479', 28.95, 0.51, 22.18, false, 21, 7, 2, 16.47, 4.93, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 19, 'AXM479', 29.81, 0.50, 22.23, false, 34, 11, 6, 15.27, 4.86, 9.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 12, 'AXM480', 29.89, 8.67, 27.21, false, 42, 20, 4, 19.50, 4.69, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 14, 'AXM478', 26.62, 7.48, 26.95, false, 59, 19, 4, 17.97, 4.85, 8.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 18, 'AXM478', 28.04, 8.19, 26.89, false, 67, 20, 1, 9.49, 4.87, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 2, 'AXM478', 31.80, 0.51, 22.33, false, 70, 19, 12, 20.37, 4.26, 6.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 6, 'AXM478', 30.73, 0.51, 22.17, false, 43, 19, 5, 13.74, 4.68, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 10, 'AXM478', 28.00, 0.50, 22.40, false, 53, 16, 9, 13.62, 4.26, 9.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 14, 'AXM478', 29.20, 0.50, 22.49, false, 48, 17, 6, 18.53, 4.90, 16.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 18, 'AXM478', 30.83, 0.52, 22.24, false, 40, 20, 8, 17.15, 4.63, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 2, 'AXM478', 28.10, 0.51, 22.49, false, 58, 18, 2, 22.33, 4.42, 15.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 16, 'AXM480', 28.52, 8.43, 26.91, false, 47, 14, 10, 13.04, 4.77, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 20, 'AXM480', 28.80, 8.02, 26.08, false, 63, 20, 9, 19.35, 4.78, 4.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 4, 'AXM480', 28.54, 0.47, 22.41, false, 74, 20, 13, 18.44, 4.43, 5.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 8, 'AXM480', 28.05, 0.49, 22.41, false, 46, 20, 4, 17.96, 4.62, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 12, 'AXM480', 30.55, 0.50, 22.16, false, 60, 16, 3, 21.35, 4.35, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 16, 'AXM480', 31.43, 0.48, 22.17, false, 23, 9, 5, 12.17, 3.93, 10.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 20, 'AXM480', 28.40, 0.53, 22.17, false, 19, 5, 2, 16.49, 5.02, 15.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 4, 'AXM480', 28.02, 0.50, 22.24, false, 55, 14, 6, 9.50, 4.12, 6.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 7, 'AXM479', 28.79, 0.48, 22.08, false, 14, 8, 1, 13.32, 4.39, 11.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 11, 'AXM479', 28.88, 0.50, 22.43, false, 21, 7, 4, 21.38, 5.11, 5.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 15, 'AXM479', 29.68, 0.52, 22.48, false, 30, 11, 5, 10.58, 4.52, 10.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 19, 'AXM479', 34.58, 0.52, 22.07, false, 51, 14, 8, 18.48, 5.15, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 3, 'AXM479', 27.09, 0.48, 22.30, false, 35, 10, 5, 19.86, 3.89, 6.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 7, 'AXM479', 28.43, 0.47, 22.26, false, 24, 11, 1, 11.10, 5.11, 5.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 11, 'AXM479', 30.65, 0.51, 22.09, false, 38, 15, 4, 12.19, 4.52, 11.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 15, 'AXM479', 29.69, 0.50, 22.09, false, 21, 6, 4, 17.93, 4.45, 17.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 19, 'AXM479', 31.70, 0.50, 22.31, false, 15, 5, 4, 21.81, 4.86, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 8, 'AXM480', 25.61, 0.51, 22.22, false, 31, 10, 6, 9.96, 4.06, 4.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 6, 'AXM478', 30.39, 0.52, 22.00, false, 15, 6, 1, 12.47, 4.47, 11.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 10, 'AXM478', 27.85, 0.51, 22.29, false, 52, 15, 10, 13.60, 4.15, 9.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 14, 'AXM478', 29.28, 0.52, 22.30, false, 19, 8, 2, 20.33, 4.38, 8.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 18, 'AXM478', 27.37, 0.49, 22.00, false, 51, 20, 6, 21.79, 5.16, 13.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 2, 'AXM478', 30.41, 0.51, 22.06, false, 55, 17, 8, 21.38, 4.93, 18.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 6, 'AXM478', 28.59, 0.52, 22.43, false, 44, 20, 7, 20.69, 4.32, 9.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 10, 'AXM478', 24.67, 0.51, 22.04, false, 42, 20, 6, 21.00, 4.44, 10.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 14, 'AXM478', 26.96, 0.49, 22.08, false, 59, 19, 5, 17.98, 5.14, 9.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 18, 'AXM478', 29.00, 0.50, 22.16, false, 67, 20, 1, 9.64, 5.06, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 12, 'AXM480', 28.05, 0.50, 22.29, false, 20, 6, 4, 12.68, 4.88, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 16, 'AXM480', 28.41, 0.50, 22.04, false, 60, 20, 11, 9.81, 4.99, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 20, 'AXM480', 31.37, 0.50, 22.43, false, 42, 15, 9, 9.38, 4.78, 7.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 4, 'AXM480', 35.39, 0.53, 22.16, false, 75, 20, 11, 19.63, 4.01, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 8, 'AXM480', 27.71, 0.52, 22.36, false, 32, 13, 7, 14.68, 4.45, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 12, 'AXM480', 31.39, 0.50, 22.31, false, 44, 20, 4, 19.68, 5.04, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 16, 'AXM480', 30.75, 0.51, 22.43, false, 49, 15, 10, 13.05, 4.92, 5.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 20, 'AXM480', 31.46, 0.47, 22.34, false, 65, 20, 10, 19.48, 4.90, 4.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 3, 'AXM479', 24.05, 1.03, 20.11, false, 66, 20, 11, 18.07, 5.67, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 7, 'AXM479', 24.31, 1.03, 20.08, false, 44, 9, 3, 15.02, 5.92, 11.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 11, 'AXM479', 24.09, 0.99, 21.12, false, 53, 11, 2, 14.72, 6.15, 9.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 15, 'AXM479', 24.14, 1.02, 21.97, false, 51, 13, 2, 16.02, 6.44, 10.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 19, 'AXM479', 24.12, 0.98, 21.09, false, 70, 17, 3, 17.96, 6.42, 8.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 3, 'AXM479', 24.39, 0.97, 21.87, false, 32, 7, 6, 15.85, 6.14, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 7, 'AXM479', 24.09, 1.03, 20.27, false, 65, 20, 7, 19.56, 5.81, 7.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 11, 'AXM479', 23.83, 0.98, 21.12, false, 69, 17, 12, 20.45, 6.45, 14.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 15, 'AXM479', 24.47, 1.03, 20.72, false, 36, 9, 6, 18.22, 5.70, 10.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 19, 'AXM479', 24.47, 1.01, 20.96, false, 89, 20, 4, 12.16, 6.00, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 3, 'AXM479', 23.70, 1.03, 22.10, false, 86, 20, 12, 11.19, 6.26, 8.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 7, 'AXM479', 23.98, 0.97, 21.02, false, 32, 8, 3, 21.01, 6.16, 11.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 11, 'AXM479', 24.02, 0.99, 21.85, false, 75, 16, 11, 12.18, 5.62, 7.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 15, 'AXM479', 23.81, 0.99, 21.28, false, 80, 16, 1, 20.10, 5.60, 12.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 19, 'AXM479', 23.57, 0.97, 20.61, false, 75, 20, 7, 12.67, 6.35, 6.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 4, 'AXM480', 24.25, 0.98, 20.07, false, 83, 20, 9, 12.38, 5.55, 9.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 2, 'AXM478', 23.94, 1.01, 21.52, false, 22, 7, 5, 16.07, 5.68, 15.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 6, 'AXM478', 23.75, 1.02, 21.84, false, 86, 20, 7, 16.70, 5.69, 7.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 10, 'AXM478', 23.93, 0.99, 21.67, false, 82, 20, 6, 20.82, 6.18, 9.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 14, 'AXM478', 23.57, 1.02, 21.70, false, 41, 11, 7, 15.11, 5.55, 6.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 18, 'AXM478', 23.53, 0.98, 20.69, false, 61, 20, 4, 19.21, 6.09, 12.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 2, 'AXM478', 24.39, 0.98, 21.67, false, 68, 20, 13, 12.63, 6.44, 6.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 6, 'AXM478', 24.47, 1.02, 20.74, false, 48, 12, 2, 12.61, 5.61, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 10, 'AXM478', 23.57, 1.01, 21.23, false, 82, 20, 3, 14.84, 5.73, 14.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 14, 'AXM478', 24.24, 0.97, 20.68, false, 43, 10, 9, 22.53, 5.68, 13.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 18, 'AXM478', 24.16, 1.00, 21.77, false, 51, 11, 2, 18.04, 5.94, 15.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 2, 'AXM478', 24.07, 0.98, 20.64, false, 36, 11, 3, 19.29, 5.82, 6.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 6, 'AXM478', 23.90, 1.02, 20.61, false, 96, 20, 14, 18.39, 5.59, 17.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 10, 'AXM478', 24.18, 0.98, 21.49, false, 54, 11, 5, 18.56, 5.95, 15.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 14, 'AXM478', 23.50, 1.01, 20.84, false, 80, 17, 2, 14.41, 6.21, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 18, 'AXM478', 23.60, 1.02, 21.19, false, 29, 8, 3, 13.59, 6.16, 8.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 8, 'AXM480', 24.40, 0.98, 20.82, false, 29, 7, 3, 11.97, 6.30, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 12, 'AXM480', 23.85, 1.01, 21.02, false, 62, 20, 2, 21.89, 6.38, 10.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 16, 'AXM480', 24.08, 1.03, 20.98, false, 61, 14, 11, 16.64, 5.66, 8.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 20, 'AXM480', 23.62, 1.01, 20.15, false, 39, 8, 5, 13.43, 6.06, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 4, 'AXM480', 24.19, 1.02, 21.27, false, 50, 13, 4, 19.46, 5.82, 14.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 8, 'AXM480', 24.16, 0.98, 20.81, false, 45, 15, 5, 12.32, 6.29, 9.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 12, 'AXM480', 23.82, 0.98, 21.11, false, 49, 12, 4, 21.61, 6.20, 16.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 16, 'AXM480', 23.89, 0.99, 21.35, false, 54, 15, 11, 19.04, 6.26, 10.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 20, 'AXM480', 24.12, 0.98, 21.66, false, 52, 11, 8, 12.83, 6.04, 9.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 4, 'AXM480', 23.74, 1.03, 21.37, false, 34, 9, 2, 12.64, 5.91, 6.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 8, 'AXM480', 23.71, 0.99, 20.70, false, 82, 20, 14, 16.48, 5.57, 9.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 12, 'AXM480', 24.43, 1.02, 22.00, false, 44, 11, 8, 17.87, 6.46, 9.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 16, 'AXM480', 24.48, 1.02, 21.44, false, 49, 14, 5, 14.73, 5.78, 5.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 20, 'AXM480', 23.72, 1.01, 21.37, false, 53, 12, 3, 20.64, 5.66, 9.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 3, 'AXM479', 25.92, 9.69, 25.40, false, 67, 20, 11, 18.19, 5.69, 15.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 7, 'AXM479', 27.39, 10.35, 24.97, false, 44, 10, 3, 15.03, 6.24, 11.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 11, 'AXM479', 27.24, 10.36, 26.02, false, 54, 12, 2, 14.81, 6.22, 9.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 15, 'AXM479', 27.02, 10.16, 24.15, false, 52, 14, 3, 16.18, 6.72, 10.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 19, 'AXM479', 25.76, 10.18, 24.40, false, 71, 18, 3, 18.08, 6.75, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 3, 'AXM479', 27.94, 9.56, 24.88, false, 34, 7, 6, 16.00, 6.52, 7.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 7, 'AXM479', 25.20, 10.08, 24.85, false, 65, 20, 7, 19.73, 6.02, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 11, 'AXM479', 24.18, 9.69, 25.79, false, 70, 17, 12, 20.60, 6.61, 14.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 15, 'AXM479', 28.11, 9.77, 25.13, false, 36, 10, 7, 18.37, 6.04, 10.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 19, 'AXM479', 24.88, 10.21, 25.21, false, 91, 20, 4, 12.30, 6.19, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 3, 'AXM479', 26.41, 10.00, 24.16, false, 86, 20, 13, 11.22, 6.37, 8.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 7, 'AXM479', 24.80, 10.05, 24.69, false, 34, 9, 3, 21.07, 6.24, 11.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 3, 'AXM479', 30.58, 9.00, 26.89, false, 34, 7, 6, 16.19, 6.89, 7.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 2, 'AXM478', 24.15, 9.86, 25.13, false, 24, 7, 5, 16.09, 5.77, 15.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 6, 'AXM478', 24.66, 10.22, 25.14, false, 88, 20, 8, 16.76, 5.92, 7.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 10, 'AXM478', 27.33, 10.09, 25.09, false, 84, 20, 6, 20.87, 6.24, 9.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 14, 'AXM478', 26.54, 9.99, 25.36, false, 43, 12, 8, 15.14, 5.65, 6.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 18, 'AXM478', 24.14, 10.00, 25.52, false, 62, 20, 5, 19.22, 6.36, 12.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 2, 'AXM478', 25.74, 9.70, 24.01, false, 69, 20, 13, 12.82, 6.76, 6.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 6, 'AXM478', 27.37, 9.56, 25.54, false, 49, 12, 3, 12.66, 5.78, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 10, 'AXM478', 24.43, 10.09, 25.34, false, 83, 20, 4, 14.93, 5.85, 14.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 14, 'AXM478', 26.62, 9.92, 25.52, false, 43, 11, 10, 22.55, 5.69, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 18, 'AXM478', 27.09, 10.10, 24.65, false, 53, 12, 3, 18.19, 5.95, 16.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 2, 'AXM478', 26.08, 9.62, 25.38, false, 36, 12, 4, 19.36, 5.89, 6.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 6, 'AXM478', 27.18, 9.68, 25.03, false, 96, 20, 15, 18.54, 5.79, 17.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 4, 'AXM480', 24.46, 9.63, 25.65, false, 84, 20, 9, 12.45, 5.59, 9.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 8, 'AXM480', 27.08, 10.48, 24.51, false, 29, 8, 3, 12.10, 6.64, 7.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 12, 'AXM480', 25.71, 10.02, 25.43, false, 63, 20, 2, 22.01, 6.47, 10.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 16, 'AXM480', 24.56, 9.58, 25.59, false, 63, 14, 11, 16.70, 5.79, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 20, 'AXM480', 27.08, 9.57, 24.91, false, 40, 8, 6, 13.49, 6.41, 11.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 4, 'AXM480', 24.58, 10.06, 25.36, false, 50, 13, 5, 19.49, 5.97, 14.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 8, 'AXM480', 24.47, 9.75, 25.87, false, 46, 16, 6, 12.33, 6.56, 9.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 12, 'AXM480', 26.45, 9.69, 25.52, false, 51, 13, 5, 21.65, 6.26, 16.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 16, 'AXM480', 25.91, 10.28, 24.91, false, 55, 16, 11, 19.08, 6.55, 10.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 20, 'AXM480', 27.57, 10.35, 25.93, false, 53, 11, 8, 12.93, 6.21, 9.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 4, 'AXM480', 26.34, 10.17, 26.02, false, 36, 9, 2, 12.79, 6.13, 6.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 11, 'AXM479', 25.67, 10.43, 25.02, false, 77, 16, 11, 12.26, 5.72, 8.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 15, 'AXM479', 27.55, 9.95, 24.03, false, 80, 16, 1, 20.16, 5.88, 12.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 19, 'AXM479', 25.78, 10.44, 25.24, false, 77, 20, 7, 12.75, 6.53, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 3, 'AXM479', 27.41, 7.04, 26.15, false, 69, 20, 11, 18.30, 6.04, 15.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 7, 'AXM479', 27.65, 7.65, 26.59, false, 44, 10, 4, 15.05, 6.38, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 11, 'AXM479', 28.43, 8.48, 26.20, false, 54, 13, 2, 14.91, 6.61, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 15, 'AXM479', 30.35, 7.82, 26.97, false, 54, 14, 3, 16.30, 6.83, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 19, 'AXM479', 28.17, 8.56, 26.84, false, 71, 19, 3, 18.22, 6.83, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 12, 'AXM480', 25.31, 9.66, 25.29, false, 46, 11, 9, 18.00, 6.56, 9.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 14, 'AXM478', 25.90, 9.84, 25.19, false, 81, 18, 3, 14.49, 6.54, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 18, 'AXM478', 24.41, 9.52, 25.67, false, 29, 9, 3, 13.69, 6.41, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 2, 'AXM478', 27.10, 8.78, 27.26, false, 25, 7, 5, 16.13, 6.16, 15.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 6, 'AXM478', 24.93, 8.10, 26.64, false, 88, 20, 8, 16.77, 6.12, 7.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 10, 'AXM478', 28.45, 8.90, 27.10, false, 86, 20, 6, 20.91, 6.35, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 14, 'AXM478', 27.19, 7.23, 26.48, false, 43, 13, 8, 15.17, 5.90, 6.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 18, 'AXM478', 25.87, 7.34, 26.20, false, 62, 20, 5, 19.30, 6.44, 12.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 2, 'AXM478', 28.66, 7.24, 26.74, false, 71, 20, 14, 12.99, 6.94, 6.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 16, 'AXM480', 28.00, 9.90, 25.51, false, 50, 15, 5, 14.88, 5.80, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 20, 'AXM480', 25.76, 10.16, 25.64, false, 54, 13, 4, 20.73, 5.85, 9.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 4, 'AXM480', 26.70, 8.42, 26.95, false, 85, 20, 9, 12.46, 5.62, 9.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 8, 'AXM480', 30.38, 7.05, 26.82, false, 30, 9, 3, 12.16, 6.83, 7.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 12, 'AXM480', 28.64, 8.65, 26.13, false, 64, 20, 2, 22.19, 6.75, 10.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 16, 'AXM480', 25.01, 8.39, 27.20, false, 63, 14, 12, 16.78, 6.11, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 20, 'AXM480', 30.56, 7.00, 26.40, false, 41, 8, 7, 13.53, 6.69, 11.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 4, 'AXM480', 26.18, 8.63, 27.02, false, 51, 13, 5, 19.62, 6.06, 14.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 7, 'AXM479', 27.34, 8.76, 27.10, false, 65, 20, 7, 19.86, 6.22, 7.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 11, 'AXM479', 26.55, 7.68, 26.76, false, 70, 18, 12, 20.76, 6.82, 14.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 15, 'AXM479', 28.56, 7.14, 27.09, false, 38, 10, 8, 18.39, 6.30, 10.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 19, 'AXM479', 27.61, 8.55, 26.62, false, 91, 20, 5, 12.39, 6.24, 11.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 3, 'AXM479', 30.41, 7.85, 26.37, false, 88, 20, 13, 11.38, 6.41, 8.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 7, 'AXM479', 25.07, 8.76, 27.30, false, 34, 9, 3, 21.19, 6.25, 11.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 11, 'AXM479', 27.94, 7.37, 26.78, false, 77, 17, 11, 12.45, 6.04, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 15, 'AXM479', 28.67, 8.10, 26.72, false, 81, 16, 1, 20.23, 5.92, 12.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 19, 'AXM479', 28.16, 8.01, 26.75, false, 78, 20, 7, 12.87, 6.84, 7.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 8, 'AXM480', 27.12, 7.68, 26.89, false, 46, 16, 7, 12.52, 6.56, 9.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 6, 'AXM478', 31.16, 9.00, 27.61, false, 51, 12, 4, 12.81, 6.03, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 10, 'AXM478', 25.30, 8.86, 26.77, false, 85, 20, 5, 15.05, 6.12, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 14, 'AXM478', 29.86, 7.86, 27.25, false, 45, 12, 10, 22.67, 6.00, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 18, 'AXM478', 29.51, 8.88, 27.74, false, 53, 12, 4, 18.37, 6.13, 16.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 2, 'AXM478', 26.95, 7.57, 26.05, false, 38, 13, 5, 19.46, 6.09, 6.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 6, 'AXM478', 30.37, 8.88, 27.34, false, 97, 20, 15, 18.67, 5.98, 17.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 10, 'AXM478', 31.35, 8.56, 27.14, false, 57, 12, 5, 18.77, 6.19, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 14, 'AXM478', 29.11, 8.27, 26.03, false, 82, 19, 4, 14.49, 6.60, 11.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 18, 'AXM478', 24.68, 8.18, 26.08, false, 30, 10, 3, 13.79, 6.73, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 12, 'AXM480', 28.84, 8.01, 26.48, false, 52, 13, 5, 21.69, 6.39, 17.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 16, 'AXM480', 27.87, 8.71, 26.57, false, 56, 16, 12, 19.21, 6.81, 10.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 20, 'AXM480', 28.63, 7.30, 26.41, false, 54, 11, 9, 13.10, 6.38, 10.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 4, 'AXM480', 29.87, 8.11, 26.70, false, 36, 10, 3, 12.90, 6.43, 6.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 8, 'AXM480', 27.38, 8.40, 27.15, false, 85, 20, 15, 16.61, 5.75, 9.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 12, 'AXM480', 28.47, 8.36, 26.10, false, 47, 12, 9, 18.16, 6.93, 9.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 16, 'AXM480', 29.96, 8.21, 26.76, false, 51, 16, 6, 14.94, 6.15, 6.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 20, 'AXM480', 27.31, 8.55, 26.81, false, 55, 13, 5, 20.90, 6.09, 9.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 3, 'AXM479', 31.33, 0.49, 22.31, false, 70, 20, 11, 18.37, 6.38, 15.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 7, 'AXM479', 29.51, 0.49, 22.01, false, 46, 10, 4, 15.10, 6.69, 11.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 11, 'AXM479', 28.78, 0.48, 22.29, false, 56, 14, 2, 14.99, 6.76, 10.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 15, 'AXM479', 33.63, 0.53, 22.01, false, 56, 14, 4, 16.33, 6.94, 10.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 19, 'AXM479', 30.56, 0.49, 22.24, false, 73, 19, 3, 18.23, 7.15, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 3, 'AXM479', 33.39, 0.51, 22.16, false, 34, 7, 6, 16.31, 6.90, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 7, 'AXM479', 27.81, 0.47, 22.37, false, 65, 20, 8, 19.93, 6.58, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 11, 'AXM479', 30.47, 0.48, 22.13, false, 72, 18, 12, 20.77, 7.18, 14.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 15, 'AXM479', 30.74, 0.52, 22.00, false, 38, 11, 8, 18.44, 6.47, 10.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 19, 'AXM479', 28.73, 0.52, 22.04, false, 93, 20, 6, 12.54, 6.25, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 3, 'AXM479', 30.62, 0.53, 22.33, false, 88, 20, 13, 11.54, 6.65, 8.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 7, 'AXM479', 26.44, 0.52, 22.28, false, 35, 10, 3, 21.26, 6.52, 11.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 11, 'AXM479', 30.62, 0.48, 22.35, false, 78, 18, 12, 12.47, 6.24, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 15, 'AXM479', 32.37, 0.50, 22.38, false, 82, 17, 1, 20.30, 6.08, 12.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 19, 'AXM479', 31.71, 0.51, 22.33, false, 78, 20, 8, 12.96, 7.02, 7.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 4, 'AXM480', 29.25, 0.49, 22.39, false, 85, 20, 10, 12.65, 6.01, 9.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 2, 'AXM478', 29.54, 0.52, 22.35, false, 26, 8, 6, 16.14, 6.55, 15.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 6, 'AXM478', 28.40, 0.51, 22.10, false, 89, 20, 9, 16.83, 6.41, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 10, 'AXM478', 29.19, 0.48, 22.09, false, 88, 20, 6, 20.95, 6.54, 10.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 14, 'AXM478', 30.13, 0.50, 22.09, false, 45, 13, 8, 15.34, 5.91, 6.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 18, 'AXM478', 28.13, 0.51, 22.26, false, 64, 20, 5, 19.37, 6.59, 12.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 2, 'AXM478', 30.31, 0.51, 22.13, false, 71, 20, 15, 13.00, 6.97, 7.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 6, 'AXM478', 33.32, 0.50, 22.08, false, 53, 12, 4, 12.88, 6.35, 11.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 10, 'AXM478', 27.84, 0.53, 22.32, false, 87, 20, 6, 15.25, 6.29, 14.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 14, 'AXM478', 30.37, 0.48, 22.36, false, 46, 12, 10, 22.74, 6.38, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 18, 'AXM478', 32.89, 0.49, 22.05, false, 54, 12, 5, 18.53, 6.41, 16.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 2, 'AXM478', 29.98, 0.48, 22.21, false, 39, 14, 6, 19.48, 6.25, 6.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 6, 'AXM478', 33.41, 0.51, 22.50, false, 98, 20, 16, 18.81, 6.33, 17.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 10, 'AXM478', 32.81, 0.50, 22.23, false, 58, 12, 6, 18.93, 6.49, 15.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 14, 'AXM478', 29.23, 0.47, 22.31, false, 84, 19, 5, 14.61, 6.73, 11.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 18, 'AXM478', 28.37, 0.51, 22.04, false, 30, 11, 4, 13.94, 7.11, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 8, 'AXM480', 32.80, 0.53, 22.39, false, 31, 10, 4, 12.26, 7.14, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 12, 'AXM480', 31.40, 0.51, 22.20, false, 66, 20, 3, 22.19, 7.07, 10.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 16, 'AXM480', 26.19, 0.53, 22.38, false, 65, 15, 12, 16.94, 6.41, 8.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 20, 'AXM480', 32.39, 0.49, 22.18, false, 41, 8, 8, 13.71, 6.95, 11.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 4, 'AXM480', 28.33, 0.52, 22.37, false, 53, 14, 5, 19.78, 6.18, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 8, 'AXM480', 30.15, 0.50, 22.01, false, 47, 17, 8, 12.62, 6.59, 9.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 12, 'AXM480', 31.58, 0.50, 22.42, false, 54, 14, 6, 21.87, 6.45, 17.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 16, 'AXM480', 29.99, 0.50, 22.22, false, 57, 16, 13, 19.36, 6.87, 10.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 20, 'AXM480', 31.37, 0.49, 22.38, false, 55, 12, 10, 13.20, 6.39, 10.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 4, 'AXM480', 32.20, 0.49, 22.00, false, 36, 10, 3, 13.09, 6.54, 6.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 8, 'AXM480', 28.87, 0.51, 22.22, false, 85, 20, 16, 16.63, 6.00, 9.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 12, 'AXM480', 30.16, 0.47, 22.36, false, 49, 12, 10, 18.34, 7.07, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 16, 'AXM480', 31.24, 0.48, 22.38, false, 51, 17, 7, 14.99, 6.36, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 20, 'AXM480', 28.85, 0.52, 22.52, false, 57, 13, 5, 21.03, 6.33, 9.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 3, 'AXM479', 24.16, 0.97, 20.80, false, 109, 17, 13, 13.45, 7.98, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 7, 'AXM479', 24.14, 0.99, 20.65, false, 104, 18, 5, 22.51, 8.37, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 11, 'AXM479', 23.90, 0.99, 21.70, false, 105, 16, 9, 17.30, 7.90, 10.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 15, 'AXM479', 23.60, 1.01, 21.97, false, 48, 8, 3, 15.16, 7.69, 9.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 19, 'AXM479', 23.62, 0.97, 21.66, false, 139, 20, 5, 24.07, 7.63, 23.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 3, 'AXM479', 23.79, 0.97, 20.38, false, 122, 20, 22, 24.55, 8.23, 14.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 7, 'AXM479', 24.49, 1.01, 21.62, false, 126, 20, 19, 14.27, 7.80, 9.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 11, 'AXM479', 24.24, 0.99, 21.09, false, 47, 8, 3, 18.17, 8.10, 12.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 15, 'AXM479', 23.94, 1.00, 21.57, false, 133, 20, 6, 17.57, 8.41, 10.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 19, 'AXM479', 24.27, 1.00, 20.06, false, 67, 10, 6, 16.74, 7.88, 14.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 3, 'AXM479', 23.97, 0.97, 21.16, false, 113, 20, 15, 25.96, 8.16, 8.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 7, 'AXM479', 24.47, 1.02, 21.88, false, 117, 20, 18, 15.31, 8.48, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 2, 'AXM478', 24.38, 1.00, 20.47, false, 51, 9, 12, 25.21, 8.29, 21.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 6, 'AXM478', 24.49, 1.03, 21.06, false, 105, 18, 19, 14.05, 7.73, 9.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 10, 'AXM478', 23.91, 1.01, 20.53, false, 65, 11, 9, 24.53, 8.06, 9.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 14, 'AXM478', 24.30, 1.01, 21.30, false, 80, 12, 10, 19.08, 8.25, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 18, 'AXM478', 23.74, 1.03, 21.87, false, 121, 20, 20, 19.67, 7.61, 10.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 2, 'AXM478', 23.95, 1.00, 21.62, false, 43, 8, 6, 15.84, 7.82, 10.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 6, 'AXM478', 23.92, 0.98, 21.80, false, 116, 19, 18, 13.78, 7.94, 13.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 10, 'AXM478', 23.87, 0.98, 21.89, false, 115, 19, 16, 21.38, 8.27, 14.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 14, 'AXM478', 23.81, 1.00, 21.45, false, 116, 19, 3, 17.25, 8.15, 14.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 18, 'AXM478', 24.44, 1.00, 21.19, false, 57, 10, 3, 24.53, 8.49, 20.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 2, 'AXM478', 23.51, 1.03, 21.01, false, 138, 20, 19, 20.29, 7.66, 9.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 6, 'AXM478', 23.69, 0.99, 20.35, false, 130, 20, 9, 20.69, 8.36, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 4, 'AXM480', 24.28, 0.99, 21.38, false, 66, 10, 6, 22.52, 8.06, 16.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 8, 'AXM480', 24.18, 1.01, 20.24, false, 103, 16, 7, 20.04, 7.68, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 12, 'AXM480', 23.63, 1.02, 21.42, false, 65, 10, 12, 16.70, 8.14, 15.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 16, 'AXM480', 24.09, 1.00, 21.11, false, 138, 20, 3, 16.94, 8.35, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 20, 'AXM480', 24.07, 0.99, 20.37, false, 59, 9, 12, 24.02, 7.55, 7.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 4, 'AXM480', 23.65, 0.98, 21.45, false, 121, 20, 11, 21.70, 7.50, 12.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 8, 'AXM480', 24.49, 0.98, 20.99, false, 101, 20, 19, 21.46, 8.28, 21.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 12, 'AXM480', 24.07, 0.98, 20.51, false, 84, 13, 6, 21.71, 7.82, 12.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 16, 'AXM480', 23.89, 1.02, 21.33, false, 74, 12, 13, 20.60, 7.56, 8.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 20, 'AXM480', 24.10, 0.98, 20.83, false, 124, 20, 11, 25.35, 8.02, 19.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 4, 'AXM480', 23.52, 0.99, 20.14, false, 54, 10, 6, 24.89, 7.59, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 11, 'AXM479', 24.22, 1.02, 20.73, false, 61, 11, 2, 14.69, 8.14, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 15, 'AXM479', 24.30, 1.03, 21.48, false, 56, 11, 7, 22.95, 7.67, 20.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 19, 'AXM479', 24.03, 1.02, 20.68, false, 100, 16, 9, 24.32, 8.13, 15.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 3, 'AXM479', 26.46, 10.01, 24.95, false, 109, 17, 14, 13.51, 8.24, 11.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 7, 'AXM479', 27.63, 9.58, 25.41, false, 105, 19, 5, 22.56, 8.63, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 11, 'AXM479', 24.18, 9.71, 25.70, false, 107, 17, 10, 17.50, 8.08, 10.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 15, 'AXM479', 27.03, 10.36, 24.17, false, 50, 9, 3, 15.34, 7.87, 9.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 19, 'AXM479', 25.84, 10.42, 24.78, false, 141, 20, 5, 24.17, 7.70, 23.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 12, 'AXM480', 24.33, 1.03, 21.87, false, 56, 11, 7, 18.76, 8.36, 14.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 14, 'AXM478', 24.22, 0.98, 21.84, false, 140, 20, 22, 15.48, 7.79, 12.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 18, 'AXM478', 24.14, 1.02, 21.83, false, 103, 18, 10, 19.11, 7.93, 13.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 2, 'AXM478', 27.04, 10.39, 25.07, false, 52, 10, 12, 25.22, 8.57, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 6, 'AXM478', 25.93, 10.45, 25.31, false, 105, 19, 19, 14.15, 7.80, 9.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 10, 'AXM478', 23.94, 9.77, 25.79, false, 67, 12, 9, 24.66, 8.14, 9.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 14, 'AXM478', 26.01, 9.90, 25.04, false, 80, 12, 10, 19.26, 8.44, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 18, 'AXM478', 26.29, 10.00, 25.24, false, 121, 20, 20, 19.75, 7.77, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 2, 'AXM478', 26.53, 9.52, 25.77, false, 43, 9, 7, 15.95, 8.15, 10.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 16, 'AXM480', 24.40, 0.98, 21.27, false, 115, 20, 24, 23.09, 7.98, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 20, 'AXM480', 23.51, 1.01, 21.22, false, 61, 12, 9, 25.87, 7.69, 17.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 4, 'AXM480', 27.55, 9.66, 24.62, false, 67, 10, 6, 22.71, 8.43, 16.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 8, 'AXM480', 27.38, 10.46, 25.14, false, 105, 16, 7, 20.13, 8.08, 18.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 12, 'AXM480', 24.51, 9.63, 24.77, false, 66, 10, 12, 16.81, 8.37, 15.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 16, 'AXM480', 24.17, 10.17, 24.44, false, 139, 20, 4, 17.12, 8.54, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 20, 'AXM480', 25.99, 9.79, 25.03, false, 61, 9, 13, 24.02, 7.75, 7.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 4, 'AXM480', 23.78, 10.05, 25.44, false, 122, 20, 12, 21.83, 7.72, 12.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 3, 'AXM479', 24.66, 10.05, 25.32, false, 122, 20, 22, 24.65, 8.58, 14.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 7, 'AXM479', 27.87, 10.19, 26.02, false, 126, 20, 19, 14.38, 8.19, 9.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 11, 'AXM479', 24.70, 9.63, 24.26, false, 49, 8, 4, 18.30, 8.37, 12.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 15, 'AXM479', 25.29, 10.43, 25.64, false, 133, 20, 7, 17.66, 8.65, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 19, 'AXM479', 24.40, 9.78, 25.40, false, 69, 11, 7, 16.87, 8.09, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 3, 'AXM479', 25.29, 10.01, 24.76, false, 114, 20, 15, 26.02, 8.16, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 7, 'AXM479', 27.28, 10.07, 25.48, false, 117, 20, 18, 15.47, 8.57, 14.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 11, 'AXM479', 25.53, 9.82, 24.33, false, 63, 11, 3, 14.86, 8.17, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 15, 'AXM479', 25.70, 10.11, 25.95, false, 58, 11, 8, 22.96, 8.04, 20.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 19, 'AXM479', 27.33, 10.44, 26.17, false, 102, 16, 10, 24.36, 8.18, 15.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 8, 'AXM480', 26.37, 10.48, 24.56, false, 102, 20, 19, 21.49, 8.59, 21.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 6, 'AXM478', 24.05, 9.91, 25.77, false, 116, 19, 19, 13.93, 8.30, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 10, 'AXM478', 24.23, 9.89, 24.57, false, 115, 20, 17, 21.57, 8.60, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 14, 'AXM478', 26.72, 9.86, 24.99, false, 117, 19, 4, 17.26, 8.36, 14.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 18, 'AXM478', 25.31, 10.10, 24.91, false, 57, 11, 4, 24.54, 8.69, 20.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 2, 'AXM478', 25.60, 9.51, 24.15, false, 140, 20, 20, 20.37, 7.87, 9.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 6, 'AXM478', 26.37, 9.80, 24.19, false, 130, 20, 9, 20.72, 8.50, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 10, 'AXM478', 24.33, 10.29, 24.89, false, 120, 20, 6, 21.00, 8.19, 14.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 14, 'AXM478', 25.92, 10.31, 25.06, false, 142, 20, 22, 15.66, 7.86, 12.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 18, 'AXM478', 27.25, 10.40, 24.79, false, 103, 18, 11, 19.17, 8.05, 13.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 12, 'AXM480', 25.92, 9.87, 25.59, false, 85, 14, 6, 21.84, 7.96, 12.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 16, 'AXM480', 25.16, 9.68, 25.17, false, 75, 13, 14, 20.66, 7.89, 8.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 20, 'AXM480', 26.78, 10.37, 26.05, false, 126, 20, 11, 25.37, 8.36, 19.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 4, 'AXM480', 24.78, 10.49, 24.65, false, 55, 11, 7, 25.07, 7.89, 15.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 8, 'AXM480', 24.87, 10.34, 24.15, false, 104, 20, 4, 14.58, 8.70, 10.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 12, 'AXM480', 26.62, 10.43, 24.19, false, 57, 11, 8, 18.83, 8.47, 14.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 16, 'AXM480', 26.99, 9.90, 24.67, false, 115, 20, 24, 23.22, 8.20, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 20, 'AXM480', 24.79, 9.51, 24.86, false, 63, 12, 10, 25.96, 7.82, 17.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 3, 'AXM479', 30.10, 8.18, 26.39, false, 110, 18, 15, 13.68, 8.45, 11.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 7, 'AXM479', 28.20, 8.44, 26.09, false, 105, 19, 6, 22.62, 8.88, 10.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 11, 'AXM479', 26.32, 8.99, 26.36, false, 109, 17, 11, 17.51, 8.28, 10.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 15, 'AXM479', 28.85, 7.97, 26.42, false, 50, 10, 3, 15.38, 8.11, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 19, 'AXM479', 29.06, 8.07, 26.31, false, 143, 20, 6, 24.26, 7.82, 23.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 3, 'AXM479', 25.75, 8.96, 27.02, false, 122, 20, 23, 24.74, 8.89, 14.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 7, 'AXM479', 29.42, 8.39, 27.27, false, 127, 20, 20, 14.51, 8.56, 9.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 11, 'AXM479', 27.37, 7.47, 26.37, false, 51, 9, 5, 18.42, 8.42, 12.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 15, 'AXM479', 28.57, 8.91, 26.15, false, 135, 20, 7, 17.69, 8.95, 10.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 19, 'AXM479', 27.30, 7.05, 26.02, false, 69, 12, 8, 16.90, 8.28, 14.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 3, 'AXM479', 27.14, 7.85, 26.41, false, 116, 20, 16, 26.22, 8.17, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 7, 'AXM479', 27.72, 8.45, 27.17, false, 119, 20, 18, 15.62, 8.58, 14.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 11, 'AXM479', 28.89, 7.37, 26.41, false, 64, 11, 4, 15.03, 8.35, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 15, 'AXM479', 28.71, 8.22, 26.56, false, 59, 11, 9, 23.05, 8.37, 20.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 19, 'AXM479', 30.32, 8.98, 26.17, false, 102, 17, 11, 24.41, 8.46, 15.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 4, 'AXM480', 28.25, 8.03, 26.98, false, 67, 10, 6, 22.79, 8.80, 16.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 2, 'AXM478', 30.89, 7.04, 26.33, false, 54, 11, 12, 25.27, 8.79, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 6, 'AXM478', 27.51, 8.01, 26.47, false, 107, 19, 20, 14.22, 7.92, 9.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 10, 'AXM478', 25.42, 8.62, 27.54, false, 69, 12, 9, 24.72, 8.38, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 14, 'AXM478', 26.42, 7.91, 26.51, false, 81, 12, 11, 19.36, 8.81, 18.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 18, 'AXM478', 27.24, 7.36, 26.40, false, 122, 20, 20, 19.82, 7.89, 10.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 2, 'AXM478', 26.55, 7.52, 27.11, false, 45, 9, 7, 16.12, 8.21, 10.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 6, 'AXM478', 26.79, 8.18, 26.26, false, 117, 20, 19, 14.09, 8.54, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 10, 'AXM478', 27.84, 7.55, 27.13, false, 115, 20, 18, 21.66, 8.72, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 14, 'AXM478', 30.71, 7.49, 26.51, false, 119, 20, 4, 17.26, 8.72, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 18, 'AXM478', 28.87, 7.48, 27.13, false, 59, 12, 5, 24.72, 9.04, 20.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 2, 'AXM478', 26.47, 8.38, 27.54, false, 140, 20, 21, 20.50, 8.24, 9.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 6, 'AXM478', 29.85, 8.21, 26.10, false, 130, 20, 10, 20.81, 8.90, 15.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 10, 'AXM478', 25.37, 8.04, 27.21, false, 122, 20, 7, 21.02, 8.49, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 14, 'AXM478', 28.40, 8.39, 26.17, false, 143, 20, 22, 15.75, 8.05, 12.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 18, 'AXM478', 29.82, 7.99, 26.37, false, 103, 18, 12, 19.33, 8.10, 13.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 8, 'AXM480', 31.06, 7.30, 26.51, false, 105, 17, 8, 20.32, 8.46, 18.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 12, 'AXM480', 28.47, 7.64, 27.00, false, 67, 10, 12, 16.87, 8.54, 15.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 16, 'AXM480', 27.68, 8.71, 26.40, false, 139, 20, 5, 17.23, 8.81, 13.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 20, 'AXM480', 27.95, 7.25, 26.01, false, 61, 10, 13, 24.03, 8.08, 8.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 4, 'AXM480', 26.54, 7.74, 26.67, false, 124, 20, 13, 21.97, 7.83, 12.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 8, 'AXM480', 26.47, 8.92, 26.36, false, 103, 20, 19, 21.52, 8.83, 21.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 12, 'AXM480', 29.21, 7.80, 26.51, false, 87, 14, 6, 21.99, 8.05, 12.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 16, 'AXM480', 25.47, 8.72, 26.45, false, 76, 14, 15, 20.75, 7.91, 8.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 20, 'AXM480', 26.96, 7.44, 26.12, false, 126, 20, 11, 25.56, 8.57, 19.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 4, 'AXM480', 28.51, 7.25, 26.55, false, 57, 11, 8, 25.15, 8.21, 15.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 8, 'AXM480', 28.81, 8.72, 27.13, false, 105, 20, 5, 14.72, 9.09, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 12, 'AXM480', 26.63, 8.83, 27.39, false, 58, 12, 9, 18.97, 8.66, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 16, 'AXM480', 30.32, 7.89, 27.14, false, 116, 20, 24, 23.41, 8.50, 12.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 20, 'AXM480', 26.33, 8.01, 27.32, false, 63, 12, 10, 26.13, 7.91, 17.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 3, 'AXM479', 32.91, 0.50, 22.42, false, 112, 19, 15, 13.80, 8.66, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 7, 'AXM479', 28.62, 0.49, 22.45, false, 107, 19, 7, 22.80, 9.02, 10.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 11, 'AXM479', 28.55, 0.50, 22.32, false, 110, 18, 12, 17.65, 8.28, 10.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 15, 'AXM479', 29.59, 0.52, 22.03, false, 51, 10, 4, 15.53, 8.47, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 19, 'AXM479', 29.07, 0.51, 22.44, false, 143, 20, 6, 24.38, 7.90, 24.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 3, 'AXM479', 26.45, 0.51, 22.17, false, 124, 20, 24, 24.89, 9.02, 14.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 7, 'AXM479', 31.65, 0.48, 22.23, false, 128, 20, 21, 14.67, 8.62, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 11, 'AXM479', 30.42, 0.47, 22.30, false, 51, 10, 5, 18.56, 8.57, 12.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 15, 'AXM479', 31.81, 0.50, 22.21, false, 136, 20, 7, 17.85, 8.95, 10.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 19, 'AXM479', 31.09, 0.49, 22.45, false, 70, 12, 9, 17.01, 8.31, 14.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 3, 'AXM479', 30.07, 0.48, 22.05, false, 117, 20, 17, 26.26, 8.40, 8.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 7, 'AXM479', 30.62, 0.51, 22.50, false, 121, 20, 18, 15.67, 8.89, 14.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 2, 'AXM478', 32.57, 0.53, 22.28, false, 55, 11, 12, 25.32, 9.00, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 6, 'AXM478', 30.80, 0.49, 22.21, false, 109, 19, 21, 14.24, 8.00, 9.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 10, 'AXM478', 25.75, 0.52, 22.52, false, 71, 12, 10, 24.77, 8.55, 9.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 14, 'AXM478', 27.97, 0.50, 22.02, false, 83, 13, 11, 19.37, 8.86, 18.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 18, 'AXM478', 27.80, 0.49, 22.01, false, 123, 20, 21, 19.83, 7.91, 10.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 2, 'AXM478', 27.80, 0.50, 22.04, false, 47, 10, 7, 16.24, 8.44, 10.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 6, 'AXM478', 27.86, 0.50, 22.23, false, 118, 20, 19, 14.16, 8.62, 13.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 10, 'AXM478', 30.46, 0.51, 22.40, false, 116, 20, 19, 21.72, 8.78, 14.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 14, 'AXM478', 30.98, 0.48, 22.06, false, 120, 20, 4, 17.41, 8.76, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 18, 'AXM478', 30.10, 0.52, 22.53, false, 60, 12, 5, 24.72, 9.12, 20.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 2, 'AXM478', 26.49, 0.52, 22.21, false, 141, 20, 22, 20.68, 8.61, 9.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 6, 'AXM478', 32.92, 0.49, 22.02, false, 132, 20, 10, 20.95, 8.97, 15.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 4, 'AXM480', 29.03, 0.50, 22.47, false, 69, 11, 6, 22.85, 9.10, 16.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 8, 'AXM480', 33.21, 0.49, 22.28, false, 107, 18, 9, 20.36, 8.54, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 12, 'AXM480', 28.66, 0.49, 22.36, false, 68, 10, 12, 16.88, 8.90, 15.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 16, 'AXM480', 27.84, 0.50, 22.08, false, 140, 20, 5, 17.37, 8.95, 13.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 20, 'AXM480', 30.26, 0.51, 22.30, false, 63, 11, 14, 24.20, 8.37, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 4, 'AXM480', 29.68, 0.51, 22.11, false, 125, 20, 14, 22.02, 8.08, 12.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 8, 'AXM480', 27.36, 0.50, 22.41, false, 104, 20, 19, 21.70, 9.23, 21.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 12, 'AXM480', 30.25, 0.49, 22.01, false, 88, 14, 7, 22.17, 8.28, 12.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 16, 'AXM480', 27.89, 0.50, 22.12, false, 76, 15, 15, 20.88, 8.29, 8.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 20, 'AXM480', 30.91, 0.48, 22.29, false, 127, 20, 12, 25.69, 8.93, 19.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 4, 'AXM480', 31.34, 0.51, 22.07, false, 59, 12, 8, 25.23, 8.37, 15.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 11, 'AXM479', 30.63, 0.50, 22.29, false, 64, 12, 4, 15.16, 8.39, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 15, 'AXM479', 32.03, 0.53, 22.32, false, 59, 12, 9, 23.21, 8.38, 20.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 19, 'AXM479', 33.11, 0.49, 22.36, false, 104, 17, 12, 24.60, 8.57, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 3, 'AXM479', 23.58, 0.98, 20.44, false, 139, 14, 23, 17.90, 11.63, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 7, 'AXM479', 23.61, 1.03, 21.18, false, 182, 20, 34, 20.02, 12.27, 17.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 11, 'AXM479', 23.65, 0.99, 21.92, false, 138, 17, 27, 20.91, 12.40, 19.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 15, 'AXM479', 24.37, 1.01, 20.02, false, 145, 15, 4, 21.71, 11.85, 12.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 19, 'AXM479', 23.93, 0.97, 21.30, false, 176, 20, 6, 21.86, 12.33, 16.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 12, 'AXM480', 30.41, 0.51, 22.30, false, 59, 12, 9, 18.98, 8.80, 14.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 14, 'AXM478', 31.08, 0.52, 22.07, false, 144, 20, 23, 15.78, 8.40, 12.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 18, 'AXM478', 31.67, 0.51, 22.45, false, 105, 18, 12, 19.35, 8.28, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 2, 'AXM478', 24.16, 1.00, 20.32, false, 173, 20, 24, 19.28, 12.28, 16.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 6, 'AXM478', 24.45, 0.99, 21.36, false, 100, 11, 9, 21.83, 11.89, 18.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 10, 'AXM478', 24.19, 1.02, 20.08, false, 191, 20, 33, 18.49, 12.40, 14.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 14, 'AXM478', 23.85, 0.98, 21.49, false, 105, 11, 16, 28.24, 12.15, 25.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 18, 'AXM478', 24.26, 1.00, 20.38, false, 197, 20, 4, 18.35, 12.28, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 2, 'AXM478', 23.69, 1.01, 21.40, false, 175, 20, 36, 23.05, 12.46, 12.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 16, 'AXM480', 33.35, 0.49, 22.12, false, 116, 20, 25, 23.57, 8.51, 12.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 20, 'AXM480', 26.46, 0.51, 22.39, false, 65, 13, 11, 26.32, 7.94, 17.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 4, 'AXM480', 24.43, 0.98, 21.34, false, 187, 19, 4, 29.75, 12.33, 14.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 8, 'AXM480', 24.43, 1.03, 22.08, false, 164, 20, 5, 23.56, 12.06, 20.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 12, 'AXM480', 23.97, 1.02, 20.89, false, 170, 20, 9, 25.93, 11.85, 18.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 16, 'AXM480', 24.33, 0.99, 21.38, false, 177, 20, 16, 20.43, 11.84, 12.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 20, 'AXM480', 23.72, 1.02, 20.08, false, 160, 19, 3, 29.95, 12.38, 29.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 4, 'AXM480', 24.34, 0.99, 21.91, false, 191, 20, 5, 22.84, 12.18, 18.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 3, 'AXM479', 23.69, 1.03, 20.16, false, 170, 20, 34, 19.69, 12.06, 12.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 7, 'AXM479', 24.20, 1.03, 20.30, false, 199, 20, 9, 19.93, 12.33, 15.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 11, 'AXM479', 23.88, 0.98, 21.48, false, 198, 20, 28, 22.09, 12.33, 16.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 15, 'AXM479', 23.78, 0.98, 21.14, false, 107, 11, 14, 20.69, 11.84, 12.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 19, 'AXM479', 23.78, 0.99, 21.09, false, 126, 13, 19, 24.33, 11.61, 21.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 3, 'AXM479', 24.39, 1.00, 20.37, false, 181, 20, 10, 28.26, 11.68, 20.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 7, 'AXM479', 23.68, 1.00, 21.46, false, 178, 20, 28, 27.69, 12.31, 27.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 11, 'AXM479', 23.57, 0.99, 21.23, false, 165, 20, 32, 19.68, 12.22, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 15, 'AXM479', 24.02, 0.99, 20.72, false, 154, 16, 14, 18.83, 11.81, 16.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 19, 'AXM479', 24.08, 0.98, 21.42, false, 165, 20, 20, 26.53, 12.36, 24.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 8, 'AXM480', 24.05, 0.98, 20.90, false, 80, 10, 11, 28.27, 11.80, 27.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 6, 'AXM478', 24.22, 0.99, 20.15, false, 147, 17, 18, 19.73, 11.95, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 10, 'AXM478', 24.12, 1.00, 20.56, false, 174, 19, 29, 27.37, 12.33, 13.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 14, 'AXM478', 23.74, 1.03, 22.01, false, 152, 17, 19, 24.95, 11.66, 14.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 18, 'AXM478', 24.26, 1.01, 21.81, false, 169, 18, 6, 17.68, 12.18, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 2, 'AXM478', 23.58, 1.02, 22.07, false, 141, 16, 16, 28.74, 11.71, 16.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 6, 'AXM478', 23.66, 0.99, 21.04, false, 169, 20, 30, 23.95, 12.20, 12.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 10, 'AXM478', 23.91, 0.99, 20.81, false, 171, 20, 19, 17.22, 11.92, 14.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 14, 'AXM478', 23.97, 1.03, 20.97, false, 168, 20, 22, 22.91, 11.71, 12.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 18, 'AXM478', 23.56, 1.03, 21.76, false, 184, 20, 32, 28.85, 11.89, 16.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 12, 'AXM480', 23.76, 1.02, 21.21, false, 95, 10, 19, 19.50, 11.72, 16.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 16, 'AXM480', 24.10, 0.99, 20.39, false, 178, 20, 6, 19.10, 11.88, 15.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 20, 'AXM480', 23.53, 1.00, 20.57, false, 179, 20, 37, 20.54, 11.88, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 4, 'AXM480', 24.20, 0.99, 21.32, false, 189, 20, 10, 18.38, 11.57, 15.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 8, 'AXM480', 23.86, 0.99, 21.19, false, 103, 12, 22, 26.15, 12.11, 23.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 12, 'AXM480', 24.00, 1.00, 21.65, false, 198, 20, 22, 20.94, 12.06, 19.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 16, 'AXM480', 23.76, 1.02, 20.05, false, 195, 20, 5, 28.01, 12.46, 13.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 20, 'AXM480', 24.16, 0.97, 20.47, false, 164, 20, 13, 21.08, 12.21, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 3, 'AXM479', 24.66, 10.00, 24.21, false, 141, 14, 24, 18.10, 11.86, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 7, 'AXM479', 26.02, 9.72, 24.78, false, 183, 20, 34, 20.10, 12.40, 17.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 11, 'AXM479', 26.57, 10.49, 25.02, false, 138, 18, 28, 21.01, 12.64, 19.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 15, 'AXM479', 26.22, 9.96, 24.51, false, 146, 15, 4, 21.79, 12.24, 12.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 19, 'AXM479', 23.93, 9.53, 24.62, false, 178, 20, 7, 21.98, 12.42, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 3, 'AXM479', 24.38, 9.93, 25.52, false, 171, 20, 35, 19.72, 12.07, 12.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 7, 'AXM479', 26.54, 10.10, 25.25, false, 199, 20, 10, 20.04, 12.61, 15.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 11, 'AXM479', 26.07, 9.51, 24.20, false, 198, 20, 28, 22.28, 12.36, 16.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 15, 'AXM479', 25.41, 10.22, 24.98, false, 107, 11, 14, 20.70, 12.04, 12.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 19, 'AXM479', 26.20, 10.35, 24.04, false, 128, 13, 20, 24.37, 11.66, 21.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 3, 'AXM479', 24.57, 10.14, 24.60, false, 183, 20, 11, 28.31, 12.03, 20.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 7, 'AXM479', 27.22, 9.82, 24.20, false, 180, 20, 29, 27.88, 12.45, 27.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 11, 'AXM479', 25.92, 9.88, 24.81, false, 165, 20, 33, 19.78, 12.26, 16.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 15, 'AXM479', 26.26, 9.83, 25.81, false, 155, 16, 15, 18.89, 12.14, 16.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 19, 'AXM479', 27.85, 10.32, 25.43, false, 166, 20, 20, 26.57, 12.68, 24.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 4, 'AXM480', 26.21, 9.63, 24.04, false, 187, 20, 4, 29.77, 12.38, 14.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 2, 'AXM478', 25.08, 10.12, 24.31, false, 175, 20, 25, 19.29, 12.48, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 6, 'AXM478', 26.00, 10.41, 25.84, false, 101, 12, 9, 21.96, 11.92, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 10, 'AXM478', 24.64, 9.95, 24.31, false, 192, 20, 34, 18.66, 12.46, 14.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 14, 'AXM478', 26.68, 10.23, 24.69, false, 105, 12, 16, 28.27, 12.52, 25.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 18, 'AXM478', 27.96, 10.21, 25.64, false, 198, 20, 5, 18.44, 12.54, 14.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 2, 'AXM478', 25.27, 10.49, 24.57, false, 175, 20, 37, 23.24, 12.57, 12.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 6, 'AXM478', 24.64, 9.89, 25.49, false, 148, 17, 18, 19.93, 12.07, 15.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 10, 'AXM478', 26.99, 9.94, 24.69, false, 176, 19, 30, 27.44, 12.54, 13.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 14, 'AXM478', 25.50, 10.23, 25.48, false, 154, 18, 19, 25.07, 11.86, 14.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 18, 'AXM478', 24.57, 9.64, 25.25, false, 170, 18, 7, 17.69, 12.20, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 2, 'AXM478', 25.74, 9.69, 25.70, false, 143, 17, 16, 28.84, 11.72, 16.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 6, 'AXM478', 26.74, 10.24, 25.72, false, 170, 20, 31, 23.97, 12.24, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 10, 'AXM478', 25.99, 9.81, 25.71, false, 172, 20, 19, 17.35, 12.16, 14.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 14, 'AXM478', 27.42, 10.28, 24.83, false, 169, 20, 23, 23.07, 11.91, 12.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 18, 'AXM478', 25.47, 9.88, 24.46, false, 186, 20, 33, 28.95, 11.91, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 8, 'AXM480', 28.38, 10.45, 25.16, false, 166, 20, 5, 23.63, 12.45, 20.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 12, 'AXM480', 26.93, 10.27, 25.76, false, 172, 20, 10, 26.12, 12.01, 18.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 16, 'AXM480', 24.64, 10.48, 25.35, false, 178, 20, 17, 20.55, 12.00, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 20, 'AXM480', 25.77, 9.50, 24.51, false, 162, 20, 4, 30.02, 12.40, 29.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 4, 'AXM480', 26.63, 9.67, 24.70, false, 191, 20, 6, 22.95, 12.55, 19.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 8, 'AXM480', 26.54, 10.27, 25.84, false, 80, 10, 12, 28.36, 12.09, 27.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 12, 'AXM480', 23.78, 10.16, 24.06, false, 95, 10, 20, 19.59, 11.87, 16.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 16, 'AXM480', 26.46, 9.96, 25.18, false, 178, 20, 7, 19.17, 11.89, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 20, 'AXM480', 26.92, 9.58, 25.05, false, 181, 20, 37, 20.66, 12.25, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 4, 'AXM480', 26.86, 9.79, 24.81, false, 190, 20, 10, 18.54, 11.82, 15.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 8, 'AXM480', 24.75, 9.82, 25.15, false, 104, 12, 22, 26.31, 12.42, 23.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 12, 'AXM480', 25.28, 9.59, 25.06, false, 200, 20, 23, 21.08, 12.09, 19.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 16, 'AXM480', 26.76, 9.57, 24.11, false, 195, 20, 5, 28.02, 12.85, 13.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 20, 'AXM480', 24.62, 10.12, 25.01, false, 164, 20, 14, 21.26, 12.44, 15.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 3, 'AXM479', 26.44, 7.05, 26.13, false, 141, 15, 24, 18.14, 12.20, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 7, 'AXM479', 28.42, 8.83, 26.99, false, 185, 20, 35, 20.18, 12.49, 17.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 11, 'AXM479', 30.54, 7.58, 27.10, false, 139, 19, 28, 21.07, 12.76, 19.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 15, 'AXM479', 26.46, 7.99, 26.11, false, 146, 15, 4, 21.81, 12.48, 12.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 19, 'AXM479', 24.74, 7.20, 26.11, false, 178, 20, 7, 22.11, 12.79, 16.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 3, 'AXM479', 28.14, 7.71, 26.35, false, 172, 20, 36, 19.85, 12.23, 12.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 7, 'AXM479', 29.47, 7.54, 26.90, false, 199, 20, 11, 20.20, 12.89, 16.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 11, 'AXM479', 28.35, 8.35, 26.07, false, 200, 20, 28, 22.42, 12.65, 16.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 15, 'AXM479', 26.29, 8.51, 26.66, false, 109, 12, 14, 20.83, 12.34, 12.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 19, 'AXM479', 30.20, 8.54, 27.48, false, 130, 13, 20, 24.55, 11.75, 22.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 3, 'AXM479', 28.34, 7.68, 26.60, false, 184, 20, 12, 28.41, 12.14, 20.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 7, 'AXM479', 29.92, 8.57, 26.35, false, 181, 20, 29, 27.98, 12.82, 27.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 2, 'AXM478', 28.24, 8.97, 27.51, false, 177, 20, 25, 19.45, 12.65, 16.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 6, 'AXM478', 28.44, 8.94, 27.68, false, 102, 12, 9, 22.14, 12.09, 18.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 10, 'AXM478', 25.96, 7.45, 27.06, false, 194, 20, 34, 18.68, 12.60, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 14, 'AXM478', 28.99, 8.93, 26.68, false, 105, 12, 16, 28.32, 12.56, 25.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 18, 'AXM478', 28.39, 7.30, 26.22, false, 198, 20, 5, 18.44, 12.64, 15.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 2, 'AXM478', 28.96, 8.04, 27.01, false, 175, 20, 37, 23.43, 12.69, 12.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 6, 'AXM478', 25.12, 7.39, 26.14, false, 150, 18, 18, 19.96, 12.25, 15.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 10, 'AXM478', 30.26, 7.49, 26.74, false, 177, 20, 30, 27.64, 12.84, 13.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 14, 'AXM478', 26.79, 7.43, 26.98, false, 156, 19, 19, 25.24, 12.12, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 18, 'AXM478', 27.85, 7.63, 27.27, false, 171, 19, 8, 17.72, 12.23, 14.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 2, 'AXM478', 27.03, 7.67, 27.26, false, 143, 18, 16, 28.96, 12.02, 16.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 6, 'AXM478', 29.12, 8.70, 26.23, false, 171, 20, 31, 23.97, 12.48, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 4, 'AXM480', 27.40, 8.97, 26.35, false, 189, 20, 4, 29.94, 12.60, 15.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 8, 'AXM480', 28.59, 7.55, 26.84, false, 168, 20, 6, 23.82, 12.51, 20.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 12, 'AXM480', 29.73, 7.95, 27.13, false, 174, 20, 10, 26.20, 12.15, 19.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 16, 'AXM480', 27.10, 8.05, 26.81, false, 178, 20, 17, 20.75, 12.16, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 20, 'AXM480', 25.95, 8.04, 26.75, false, 163, 20, 5, 30.19, 12.65, 29.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 4, 'AXM480', 28.87, 7.36, 26.16, false, 191, 20, 7, 23.06, 12.73, 19.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 8, 'AXM480', 30.31, 7.13, 26.21, false, 81, 10, 13, 28.56, 12.10, 27.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 12, 'AXM480', 24.18, 8.69, 27.61, false, 95, 10, 21, 19.62, 12.25, 16.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 16, 'AXM480', 27.15, 8.38, 26.19, false, 180, 20, 7, 19.28, 11.94, 15.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 20, 'AXM480', 28.46, 7.68, 27.19, false, 181, 20, 38, 20.78, 12.55, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 4, 'AXM480', 30.00, 7.24, 26.59, false, 192, 20, 11, 18.61, 11.90, 15.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 11, 'AXM479', 26.08, 7.10, 26.51, false, 165, 20, 33, 19.90, 12.34, 16.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 15, 'AXM479', 26.87, 8.95, 26.75, false, 157, 16, 15, 18.93, 12.35, 16.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 19, 'AXM479', 30.61, 8.63, 27.53, false, 167, 20, 20, 26.73, 12.90, 24.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 3, 'AXM479', 29.07, 0.52, 22.04, false, 141, 15, 25, 18.20, 12.54, 15.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 7, 'AXM479', 31.15, 0.51, 22.38, false, 187, 20, 35, 20.19, 12.86, 17.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 11, 'AXM479', 31.95, 0.51, 22.25, false, 141, 20, 29, 21.19, 12.96, 19.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 15, 'AXM479', 28.74, 0.49, 22.41, false, 148, 16, 5, 21.82, 12.56, 12.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 19, 'AXM479', 26.68, 0.52, 22.47, false, 178, 20, 8, 22.21, 13.11, 16.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 12, 'AXM480', 25.99, 8.64, 26.11, false, 201, 20, 23, 21.20, 12.22, 19.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 14, 'AXM478', 28.00, 7.41, 27.01, false, 169, 20, 24, 23.17, 12.07, 12.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 18, 'AXM478', 26.89, 8.13, 26.44, false, 187, 20, 33, 28.95, 12.26, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 2, 'AXM478', 31.32, 0.48, 22.42, false, 178, 20, 26, 19.57, 12.70, 16.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 6, 'AXM478', 31.33, 0.50, 22.10, false, 102, 12, 9, 22.32, 12.36, 19.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 10, 'AXM478', 27.36, 0.48, 22.21, false, 194, 20, 35, 18.77, 12.68, 14.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 14, 'AXM478', 31.31, 0.50, 22.32, false, 107, 12, 16, 28.51, 12.85, 25.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 18, 'AXM478', 29.15, 0.48, 22.44, false, 198, 20, 6, 18.49, 12.73, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 2, 'AXM478', 29.20, 0.51, 22.38, false, 175, 20, 37, 23.47, 12.96, 13.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 16, 'AXM480', 29.19, 8.00, 27.29, false, 197, 20, 6, 28.17, 13.04, 13.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 20, 'AXM480', 26.84, 8.08, 27.18, false, 165, 20, 15, 21.31, 12.58, 15.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 4, 'AXM480', 28.16, 0.49, 22.01, false, 189, 20, 5, 30.10, 12.90, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 8, 'AXM480', 30.94, 0.53, 22.13, false, 168, 20, 7, 23.88, 12.56, 20.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 12, 'AXM480', 30.30, 0.51, 22.46, false, 174, 20, 10, 26.37, 12.34, 19.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 16, 'AXM480', 30.75, 0.47, 22.05, false, 179, 20, 17, 20.75, 12.25, 12.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 20, 'AXM480', 29.80, 0.49, 22.34, false, 163, 20, 5, 30.38, 12.84, 29.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 4, 'AXM480', 31.49, 0.49, 22.26, false, 191, 20, 8, 23.20, 12.76, 19.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 3, 'AXM479', 30.47, 0.50, 22.28, false, 174, 20, 36, 19.89, 12.57, 12.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 7, 'AXM479', 33.07, 0.50, 22.47, false, 199, 20, 12, 20.33, 12.89, 16.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 11, 'AXM479', 30.76, 0.48, 22.18, false, 202, 20, 28, 22.60, 12.90, 16.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 15, 'AXM479', 27.56, 0.48, 22.02, false, 109, 12, 15, 20.97, 12.67, 12.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 19, 'AXM479', 30.39, 0.53, 22.54, false, 130, 14, 21, 24.56, 12.04, 22.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 3, 'AXM479', 29.36, 0.49, 22.25, false, 184, 20, 13, 28.52, 12.25, 20.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 7, 'AXM479', 30.62, 0.50, 22.14, false, 183, 20, 29, 28.03, 13.04, 27.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 11, 'AXM479', 26.89, 0.50, 22.30, false, 165, 20, 34, 20.00, 12.42, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 15, 'AXM479', 28.05, 0.52, 22.04, false, 157, 17, 15, 19.12, 12.41, 16.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 19, 'AXM479', 34.27, 0.47, 22.44, false, 167, 20, 20, 26.77, 13.22, 24.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 8, 'AXM480', 32.00, 0.48, 22.30, false, 81, 11, 13, 28.76, 12.34, 27.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 6, 'AXM478', 27.72, 0.48, 22.45, false, 152, 19, 19, 20.01, 12.49, 15.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 10, 'AXM478', 31.52, 0.52, 22.02, false, 179, 20, 31, 27.69, 12.95, 13.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 14, 'AXM478', 29.39, 0.53, 22.47, false, 157, 20, 19, 25.36, 12.52, 14.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 18, 'AXM478', 31.18, 0.53, 22.49, false, 172, 19, 9, 17.75, 12.43, 14.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 2, 'AXM478', 27.33, 0.52, 22.44, false, 144, 19, 17, 29.00, 12.10, 16.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 6, 'AXM478', 29.81, 0.52, 22.21, false, 172, 20, 31, 24.05, 12.58, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 10, 'AXM478', 30.43, 0.53, 22.39, false, 175, 20, 21, 17.57, 12.61, 15.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 14, 'AXM478', 31.66, 0.52, 22.33, false, 170, 20, 25, 23.33, 12.45, 12.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 18, 'AXM478', 28.78, 0.51, 22.45, false, 187, 20, 34, 29.01, 12.54, 16.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 12, 'AXM480', 27.90, 0.52, 22.03, false, 96, 10, 22, 19.66, 12.54, 16.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 16, 'AXM480', 30.32, 0.47, 22.25, false, 181, 20, 7, 19.43, 11.94, 15.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 20, 'AXM480', 29.16, 0.49, 22.03, false, 183, 20, 39, 20.93, 12.91, 14.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 4, 'AXM480', 30.82, 0.49, 22.16, false, 194, 20, 11, 18.75, 12.26, 15.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 8, 'AXM480', 28.58, 0.52, 22.36, false, 107, 14, 23, 26.53, 12.90, 23.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 12, 'AXM480', 29.57, 0.52, 22.29, false, 202, 20, 23, 21.21, 12.54, 19.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 16, 'AXM480', 31.78, 0.49, 22.21, false, 197, 20, 7, 28.27, 13.05, 13.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 20, 'AXM480', 27.35, 0.50, 22.07, false, 165, 20, 15, 21.33, 12.59, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 3, 'AXM479', 23.91, 0.99, 20.34, false, 159, 14, 32, 31.63, 15.75, 30.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 7, 'AXM479', 23.80, 0.99, 21.89, false, 241, 20, 49, 31.57, 16.46, 21.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 11, 'AXM479', 24.29, 1.01, 20.19, false, 211, 17, 31, 31.37, 15.50, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 15, 'AXM479', 23.81, 1.02, 21.96, false, 181, 15, 25, 31.66, 16.32, 28.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 19, 'AXM479', 24.17, 0.98, 21.53, false, 232, 20, 42, 23.42, 16.22, 21.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 3, 'AXM479', 23.76, 1.00, 21.79, false, 237, 20, 18, 24.29, 15.94, 18.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 7, 'AXM479', 24.48, 1.01, 21.78, false, 238, 20, 34, 31.02, 16.26, 17.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 11, 'AXM479', 24.36, 1.00, 21.01, false, 260, 20, 9, 28.98, 15.75, 17.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 15, 'AXM479', 24.45, 1.00, 20.99, false, 128, 11, 22, 23.51, 15.80, 18.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 19, 'AXM479', 24.27, 1.01, 21.31, false, 164, 13, 8, 30.38, 15.80, 20.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 3, 'AXM479', 24.40, 1.02, 20.15, false, 252, 20, 18, 31.79, 15.77, 20.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 7, 'AXM479', 24.27, 1.03, 21.97, false, 239, 20, 29, 28.18, 15.57, 25.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 11, 'AXM479', 24.13, 0.97, 20.22, false, 235, 20, 9, 23.31, 16.07, 18.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 15, 'AXM479', 24.02, 0.98, 21.11, false, 194, 16, 12, 31.69, 15.63, 27.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 19, 'AXM479', 24.44, 0.99, 20.18, false, 231, 20, 31, 27.14, 15.58, 20.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 4, 'AXM480', 23.62, 0.97, 20.63, false, 216, 19, 19, 27.41, 15.90, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 2, 'AXM478', 24.47, 1.01, 20.74, false, 228, 20, 33, 30.24, 16.23, 27.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 6, 'AXM478', 24.00, 0.98, 21.66, false, 127, 11, 25, 29.63, 16.28, 25.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 10, 'AXM478', 23.60, 0.99, 21.84, false, 239, 20, 46, 24.26, 16.38, 22.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 14, 'AXM478', 24.27, 1.01, 21.25, false, 122, 11, 18, 29.58, 16.07, 26.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 18, 'AXM478', 23.59, 1.00, 21.46, false, 240, 20, 24, 29.17, 15.82, 16.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 2, 'AXM478', 23.53, 1.01, 21.40, false, 247, 20, 6, 31.63, 16.02, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 6, 'AXM478', 23.69, 1.03, 21.01, false, 203, 17, 37, 29.35, 16.35, 23.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 10, 'AXM478', 24.42, 0.98, 20.42, false, 223, 19, 37, 21.73, 16.06, 17.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 14, 'AXM478', 24.27, 0.99, 20.79, false, 195, 17, 29, 21.58, 15.79, 17.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 18, 'AXM478', 24.20, 1.01, 22.02, false, 229, 18, 8, 33.22, 15.56, 18.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 2, 'AXM478', 23.57, 0.99, 21.79, false, 195, 16, 35, 26.34, 15.71, 23.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 6, 'AXM478', 24.25, 0.99, 20.81, false, 251, 20, 42, 30.66, 16.02, 17.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 10, 'AXM478', 24.47, 1.00, 21.02, false, 245, 20, 46, 29.71, 15.75, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 14, 'AXM478', 23.80, 0.99, 21.28, false, 242, 20, 4, 23.43, 16.05, 23.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 18, 'AXM478', 24.33, 1.00, 21.87, false, 259, 20, 10, 32.31, 16.01, 19.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 8, 'AXM480', 24.18, 1.02, 20.17, false, 256, 20, 33, 26.10, 16.11, 16.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 12, 'AXM480', 24.22, 0.98, 21.10, false, 238, 20, 17, 32.31, 15.72, 21.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 16, 'AXM480', 24.31, 0.97, 20.70, false, 226, 20, 20, 21.90, 16.13, 17.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 20, 'AXM480', 24.33, 0.98, 20.31, false, 240, 19, 47, 28.11, 16.30, 21.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 4, 'AXM480', 23.84, 0.98, 20.92, false, 241, 20, 37, 23.91, 15.88, 23.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 8, 'AXM480', 24.27, 0.97, 20.43, false, 111, 10, 9, 30.47, 15.93, 23.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 12, 'AXM480', 23.81, 1.02, 20.18, false, 113, 10, 9, 23.75, 16.34, 17.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 16, 'AXM480', 23.87, 1.02, 20.05, false, 236, 20, 7, 32.15, 15.88, 16.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 20, 'AXM480', 24.35, 0.99, 20.23, false, 255, 20, 11, 27.42, 15.81, 17.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 4, 'AXM480', 24.14, 1.02, 20.80, false, 260, 20, 4, 27.41, 15.83, 24.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 8, 'AXM480', 23.98, 1.00, 20.88, false, 138, 12, 13, 26.54, 16.50, 22.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 12, 'AXM480', 23.87, 0.97, 20.65, false, 240, 20, 30, 21.47, 16.08, 19.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 16, 'AXM480', 23.57, 1.03, 22.06, false, 245, 20, 32, 28.99, 15.59, 26.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 20, 'AXM480', 23.92, 1.02, 20.94, false, 259, 20, 41, 32.31, 16.39, 24.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 3, 'AXM479', 27.43, 10.07, 25.32, false, 159, 14, 32, 31.80, 15.89, 30.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 7, 'AXM479', 26.74, 9.94, 24.14, false, 241, 20, 50, 31.70, 16.59, 21.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 11, 'AXM479', 27.51, 10.27, 24.24, false, 213, 18, 32, 31.56, 15.69, 18.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 15, 'AXM479', 26.24, 10.17, 24.74, false, 182, 15, 26, 31.77, 16.39, 28.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 19, 'AXM479', 24.88, 9.56, 24.39, false, 234, 20, 42, 23.46, 16.46, 21.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 3, 'AXM479', 27.65, 10.02, 24.38, false, 237, 20, 18, 24.36, 16.27, 18.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 7, 'AXM479', 25.37, 9.88, 25.05, false, 238, 20, 35, 31.14, 16.62, 17.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 11, 'AXM479', 26.58, 9.97, 25.78, false, 261, 20, 9, 29.05, 15.92, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 15, 'AXM479', 27.96, 9.88, 24.98, false, 128, 11, 23, 23.55, 15.96, 18.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 19, 'AXM479', 27.25, 9.63, 24.77, false, 164, 13, 8, 30.47, 16.04, 20.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 3, 'AXM479', 24.88, 10.25, 25.40, false, 252, 20, 18, 31.96, 15.91, 20.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 7, 'AXM479', 25.84, 9.59, 24.25, false, 241, 20, 30, 28.34, 15.82, 25.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 2, 'AXM478', 27.42, 9.58, 25.80, false, 230, 20, 34, 30.33, 16.57, 27.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 6, 'AXM478', 26.78, 9.64, 25.59, false, 128, 12, 25, 29.75, 16.60, 26.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 10, 'AXM478', 26.20, 9.53, 25.17, false, 240, 20, 46, 24.37, 16.53, 22.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 14, 'AXM478', 26.11, 10.20, 25.20, false, 124, 12, 19, 29.69, 16.32, 26.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 18, 'AXM478', 25.75, 9.96, 25.42, false, 242, 20, 25, 29.21, 16.03, 16.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 2, 'AXM478', 23.99, 9.79, 25.69, false, 248, 20, 6, 31.68, 16.11, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 6, 'AXM478', 25.25, 9.94, 24.82, false, 205, 17, 38, 29.53, 16.51, 23.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 10, 'AXM478', 26.18, 9.98, 24.62, false, 223, 19, 37, 21.79, 16.45, 17.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 14, 'AXM478', 26.66, 9.79, 25.45, false, 197, 18, 30, 21.69, 15.81, 17.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 18, 'AXM478', 25.13, 9.86, 25.79, false, 230, 18, 8, 33.30, 15.80, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 2, 'AXM478', 24.39, 10.15, 25.34, false, 195, 17, 36, 26.36, 15.97, 23.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 6, 'AXM478', 26.68, 9.83, 25.55, false, 252, 20, 43, 30.81, 16.26, 17.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 4, 'AXM480', 27.18, 10.17, 25.23, false, 216, 20, 19, 27.45, 15.99, 20.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 8, 'AXM480', 26.17, 9.65, 25.73, false, 258, 20, 33, 26.14, 16.29, 16.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 12, 'AXM480', 24.29, 9.98, 24.56, false, 239, 20, 18, 32.35, 15.80, 21.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 16, 'AXM480', 26.80, 10.36, 24.33, false, 226, 20, 20, 22.06, 16.35, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 20, 'AXM480', 27.22, 10.35, 25.66, false, 240, 20, 48, 28.31, 16.48, 21.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 4, 'AXM480', 27.84, 10.28, 25.12, false, 243, 20, 38, 24.09, 16.13, 23.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 8, 'AXM480', 26.66, 10.06, 25.48, false, 111, 10, 9, 30.60, 16.13, 23.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 12, 'AXM480', 26.45, 10.48, 25.09, false, 115, 10, 10, 23.93, 16.42, 17.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 16, 'AXM480', 25.54, 9.73, 25.74, false, 238, 20, 7, 32.21, 16.06, 16.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 20, 'AXM480', 25.25, 10.49, 24.14, false, 257, 20, 12, 27.43, 16.16, 17.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 4, 'AXM480', 25.93, 9.83, 24.93, false, 260, 20, 5, 27.52, 16.05, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 11, 'AXM479', 27.89, 9.79, 24.09, false, 236, 20, 10, 23.45, 16.13, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 15, 'AXM479', 24.60, 9.65, 24.11, false, 194, 16, 13, 31.71, 15.85, 27.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 19, 'AXM479', 27.37, 9.94, 24.51, false, 232, 20, 31, 27.19, 15.62, 21.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 3, 'AXM479', 27.50, 8.18, 26.32, false, 159, 15, 33, 31.83, 16.10, 30.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 7, 'AXM479', 27.67, 7.49, 26.94, false, 242, 20, 51, 31.78, 16.99, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 11, 'AXM479', 30.07, 8.04, 27.07, false, 215, 19, 32, 31.76, 15.72, 18.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 15, 'AXM479', 28.36, 7.93, 26.13, false, 183, 15, 26, 31.96, 16.57, 28.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 19, 'AXM479', 25.48, 7.85, 26.90, false, 234, 20, 42, 23.49, 16.56, 21.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 12, 'AXM480', 24.56, 9.87, 25.16, false, 240, 20, 31, 21.63, 16.09, 19.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 14, 'AXM478', 26.05, 9.99, 25.64, false, 242, 20, 4, 23.53, 16.35, 23.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 18, 'AXM478', 25.50, 9.52, 24.71, false, 261, 20, 11, 32.38, 16.26, 19.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 2, 'AXM478', 30.61, 8.98, 27.37, false, 231, 20, 35, 30.33, 16.83, 27.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 6, 'AXM478', 27.74, 7.21, 26.68, false, 130, 12, 25, 29.89, 16.93, 26.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 10, 'AXM478', 28.22, 7.59, 26.81, false, 241, 20, 47, 24.53, 16.64, 22.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 14, 'AXM478', 29.85, 7.56, 26.24, false, 124, 12, 20, 29.77, 16.55, 26.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 18, 'AXM478', 26.56, 8.53, 26.65, false, 242, 20, 26, 29.27, 16.23, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 2, 'AXM478', 27.45, 7.67, 26.30, false, 248, 20, 6, 31.70, 16.13, 18.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 16, 'AXM480', 25.35, 9.53, 24.88, false, 245, 20, 33, 29.05, 15.84, 26.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 20, 'AXM480', 25.30, 10.25, 24.96, false, 260, 20, 42, 32.42, 16.71, 24.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 4, 'AXM480', 28.55, 7.51, 27.16, false, 216, 20, 20, 27.56, 16.24, 20.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 8, 'AXM480', 27.73, 7.01, 26.57, false, 258, 20, 34, 26.24, 16.36, 16.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 12, 'AXM480', 28.16, 7.76, 27.14, false, 239, 20, 19, 32.52, 15.81, 21.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 16, 'AXM480', 28.83, 8.60, 27.52, false, 226, 20, 21, 22.24, 16.47, 17.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 20, 'AXM480', 29.72, 8.81, 27.34, false, 241, 20, 49, 28.35, 16.83, 21.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 4, 'AXM480', 29.92, 7.03, 26.99, false, 244, 20, 39, 24.15, 16.50, 23.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 3, 'AXM479', 31.41, 8.77, 26.83, false, 238, 20, 19, 24.40, 16.47, 18.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 7, 'AXM479', 28.53, 8.57, 26.65, false, 239, 20, 36, 31.27, 16.65, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 11, 'AXM479', 27.10, 8.95, 27.52, false, 261, 20, 9, 29.15, 15.96, 18.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 15, 'AXM479', 28.20, 7.06, 26.89, false, 128, 12, 24, 23.70, 16.18, 18.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 19, 'AXM479', 27.83, 8.12, 26.47, false, 165, 13, 8, 30.65, 16.33, 20.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 3, 'AXM479', 25.86, 8.15, 26.32, false, 252, 20, 18, 32.04, 16.28, 20.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 7, 'AXM479', 27.32, 7.03, 26.04, false, 242, 20, 31, 28.51, 15.94, 25.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 11, 'AXM479', 31.41, 8.46, 26.73, false, 238, 20, 11, 23.48, 16.49, 18.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 15, 'AXM479', 25.85, 8.13, 26.94, false, 196, 16, 14, 31.78, 15.90, 27.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 19, 'AXM479', 28.92, 7.79, 26.89, false, 233, 20, 31, 27.22, 15.86, 21.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 8, 'AXM480', 30.64, 7.21, 26.48, false, 113, 10, 10, 30.79, 16.34, 23.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 6, 'AXM478', 28.97, 8.56, 27.25, false, 207, 18, 38, 29.57, 16.61, 23.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 10, 'AXM478', 29.80, 8.16, 26.14, false, 225, 20, 38, 21.87, 16.79, 17.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 14, 'AXM478', 28.40, 7.85, 27.20, false, 199, 19, 30, 21.73, 16.19, 18.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 18, 'AXM478', 28.78, 7.29, 26.78, false, 231, 19, 8, 33.34, 15.83, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 2, 'AXM478', 28.09, 8.16, 26.72, false, 196, 18, 37, 26.49, 16.20, 23.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 6, 'AXM478', 27.75, 8.42, 26.74, false, 254, 20, 43, 30.85, 16.31, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 10, 'AXM478', 28.60, 8.95, 27.22, false, 247, 20, 48, 29.96, 16.27, 22.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 14, 'AXM478', 26.32, 7.53, 27.04, false, 242, 20, 4, 23.54, 16.71, 23.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 18, 'AXM478', 27.22, 8.92, 26.46, false, 262, 20, 11, 32.49, 16.47, 19.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 12, 'AXM480', 29.98, 8.10, 26.27, false, 117, 10, 11, 24.06, 16.79, 17.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 16, 'AXM480', 26.42, 8.25, 26.35, false, 238, 20, 8, 32.31, 16.24, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 20, 'AXM480', 26.78, 8.46, 26.72, false, 257, 20, 12, 27.61, 16.51, 17.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 4, 'AXM480', 27.56, 7.11, 26.09, false, 261, 20, 6, 27.55, 16.37, 24.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 8, 'AXM480', 27.67, 8.01, 27.24, false, 142, 13, 15, 26.77, 16.92, 22.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 12, 'AXM480', 26.11, 7.20, 26.37, false, 240, 20, 32, 21.83, 16.38, 19.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 16, 'AXM480', 27.40, 7.95, 26.80, false, 247, 20, 33, 29.10, 15.90, 26.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 20, 'AXM480', 25.83, 8.23, 26.66, false, 262, 20, 43, 32.57, 16.97, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 3, 'AXM479', 29.87, 0.49, 22.18, false, 160, 15, 33, 31.93, 16.12, 30.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 7, 'AXM479', 27.98, 0.50, 22.03, false, 243, 20, 51, 31.84, 17.17, 22.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 11, 'AXM479', 31.12, 0.52, 22.44, false, 215, 20, 32, 31.80, 15.93, 18.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 15, 'AXM479', 29.48, 0.49, 22.24, false, 183, 16, 26, 31.96, 16.94, 28.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 19, 'AXM479', 28.11, 0.48, 22.30, false, 236, 20, 43, 23.58, 16.75, 21.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 3, 'AXM479', 32.67, 0.52, 22.50, false, 239, 20, 19, 24.42, 16.56, 18.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 7, 'AXM479', 31.87, 0.48, 22.36, false, 239, 20, 36, 31.41, 16.67, 18.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 11, 'AXM479', 30.34, 0.49, 22.16, false, 262, 20, 10, 29.27, 15.99, 18.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 15, 'AXM479', 28.76, 0.52, 22.52, false, 128, 12, 25, 23.82, 16.50, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 19, 'AXM479', 29.54, 0.49, 22.34, false, 165, 14, 9, 30.71, 16.50, 20.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 3, 'AXM479', 26.40, 0.53, 22.33, false, 253, 20, 19, 32.07, 16.32, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 7, 'AXM479', 27.48, 0.48, 22.38, false, 242, 20, 32, 28.52, 16.06, 25.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 11, 'AXM479', 35.37, 0.50, 22.34, false, 238, 20, 12, 23.50, 16.60, 18.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 15, 'AXM479', 28.15, 0.52, 22.39, false, 196, 17, 14, 31.93, 16.20, 27.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 19, 'AXM479', 29.79, 0.53, 22.35, false, 235, 20, 32, 27.39, 15.95, 21.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 4, 'AXM480', 32.31, 0.47, 22.35, false, 216, 20, 20, 27.64, 16.45, 20.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 2, 'AXM478', 31.00, 0.49, 22.35, false, 233, 20, 36, 30.35, 16.93, 27.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 6, 'AXM478', 30.48, 0.52, 22.16, false, 130, 12, 26, 30.01, 16.94, 26.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 10, 'AXM478', 28.63, 0.53, 22.44, false, 242, 20, 47, 24.57, 16.89, 22.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 14, 'AXM478', 33.42, 0.52, 22.32, false, 125, 12, 21, 29.77, 16.74, 26.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 18, 'AXM478', 26.63, 0.50, 22.43, false, 242, 20, 26, 29.38, 16.34, 16.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 2, 'AXM478', 31.20, 0.52, 22.50, false, 249, 20, 7, 31.85, 16.51, 18.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 6, 'AXM478', 31.02, 0.52, 22.04, false, 208, 19, 39, 29.58, 16.98, 23.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 10, 'AXM478', 31.72, 0.48, 22.00, false, 225, 20, 39, 21.98, 17.05, 17.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 14, 'AXM478', 30.44, 0.49, 22.25, false, 200, 20, 31, 21.87, 16.22, 18.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 18, 'AXM478', 32.53, 0.50, 22.39, false, 231, 19, 8, 33.39, 16.20, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 2, 'AXM478', 28.95, 0.47, 22.01, false, 197, 19, 38, 26.58, 16.24, 23.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 6, 'AXM478', 28.46, 0.47, 22.27, false, 256, 20, 44, 31.00, 16.32, 18.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 10, 'AXM478', 32.50, 0.50, 22.24, false, 247, 20, 49, 30.08, 16.28, 22.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 14, 'AXM478', 26.90, 0.50, 22.40, false, 244, 20, 4, 23.61, 16.95, 23.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 18, 'AXM478', 28.42, 0.51, 22.14, false, 264, 20, 12, 32.64, 16.73, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 8, 'AXM480', 28.54, 0.51, 22.11, false, 258, 20, 35, 26.35, 16.36, 16.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 12, 'AXM480', 31.96, 0.49, 22.04, false, 241, 20, 20, 32.66, 15.89, 21.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 16, 'AXM480', 29.33, 0.49, 22.01, false, 227, 20, 21, 22.25, 16.49, 17.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 20, 'AXM480', 30.62, 0.51, 22.02, false, 241, 20, 50, 28.45, 17.22, 21.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 4, 'AXM480', 31.90, 0.48, 22.22, false, 244, 20, 39, 24.30, 16.76, 23.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 8, 'AXM480', 31.28, 0.49, 22.36, false, 115, 11, 10, 30.91, 16.35, 23.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 12, 'AXM480', 31.04, 0.51, 22.25, false, 119, 10, 12, 24.15, 17.03, 17.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 16, 'AXM480', 27.79, 0.51, 22.36, false, 239, 20, 8, 32.37, 16.32, 16.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 20, 'AXM480', 27.84, 0.47, 22.10, false, 257, 20, 13, 27.80, 16.87, 17.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 4, 'AXM480', 29.38, 0.51, 22.40, false, 261, 20, 6, 27.59, 16.63, 24.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 8, 'AXM480', 30.66, 0.47, 22.40, false, 142, 14, 15, 26.87, 16.98, 22.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 12, 'AXM480', 26.13, 0.50, 22.30, false, 242, 20, 33, 21.93, 16.73, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 16, 'AXM480', 31.25, 0.50, 22.36, false, 247, 20, 33, 29.21, 16.13, 26.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 20, 'AXM480', 27.46, 0.52, 22.30, false, 263, 20, 44, 32.67, 17.18, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 1, 'AXM477', 24.19, 0.97, 21.14, false, 35, 5, 2, 8.70, 1.71, 3.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 5, 'AXM477', 24.41, 0.97, 20.80, false, 10, 16, 2, 16.32, 1.81, 3.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 9, 'AXM477', 23.93, 1.01, 20.62, false, 0, 0, 0, 17.84, 1.85, 15.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 13, 'AXM477', 24.28, 1.02, 20.73, false, 6, 11, 0, 16.89, 2.35, 4.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 17, 'AXM477', 24.34, 1.03, 20.09, false, 2, 3, 0, 17.56, 1.73, 14.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 1, 'AXM477', 24.50, 1.01, 20.53, false, 24, 9, 4, 8.70, 1.62, 6.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 5, 'AXM477', 23.95, 1.01, 21.19, false, 4, 15, 0, 9.79, 1.64, 5.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 9, 'AXM477', 23.50, 1.02, 21.51, false, 29, 19, 4, 8.04, 1.50, 2.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 13, 'AXM477', 23.98, 1.00, 21.14, false, 8, 5, 1, 11.28, 2.50, 8.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 17, 'AXM477', 24.22, 1.01, 20.87, false, 22, 14, 4, 12.65, 1.92, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 1, 'AXM477', 24.17, 1.01, 20.01, false, 22, 0, 3, 8.70, 1.55, 8.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 5, 'AXM477', 24.21, 0.99, 20.51, false, 2, 18, 0, 10.44, 1.57, 10.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 9, 'AXM477', 24.46, 0.98, 21.54, false, 5, 8, 0, 8.67, 1.74, 7.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 13, 'AXM477', 23.97, 0.98, 20.22, false, 5, 7, 0, 8.52, 2.27, 4.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 17, 'AXM477', 24.16, 1.00, 20.80, false, 0, 2, 0, 19.99, 1.65, 17.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 1, 'AXM477', 26.66, 9.82, 25.10, false, 37, 5, 2, 8.72, 1.74, 3.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 5, 'AXM477', 25.54, 9.67, 24.08, false, 12, 17, 2, 16.40, 1.95, 3.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 9, 'AXM477', 27.66, 10.03, 24.44, false, 1, 1, 1, 17.87, 2.04, 15.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 13, 'AXM477', 25.91, 9.68, 24.85, false, 7, 12, 0, 17.05, 2.53, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 17, 'AXM477', 27.54, 9.81, 25.40, false, 4, 3, 1, 17.60, 1.92, 14.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 1, 'AXM477', 27.08, 9.53, 25.34, false, 25, 10, 4, 8.74, 1.62, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 5, 'AXM477', 26.90, 10.17, 24.19, false, 6, 15, 1, 9.80, 1.97, 5.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 9, 'AXM477', 27.03, 9.89, 25.84, false, 31, 20, 5, 8.09, 1.79, 2.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 13, 'AXM477', 24.62, 9.65, 24.99, false, 10, 5, 1, 11.28, 2.63, 8.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 17, 'AXM477', 27.69, 10.49, 24.05, false, 22, 15, 5, 12.70, 2.29, 4.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 1, 'AXM477', 25.42, 9.57, 25.18, false, 22, 1, 4, 8.84, 1.89, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 5, 'AXM477', 25.84, 10.21, 24.70, false, 4, 18, 0, 10.50, 1.93, 10.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 9, 'AXM477', 24.97, 10.30, 25.72, false, 5, 8, 0, 8.87, 2.09, 7.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 13, 'AXM477', 24.05, 10.16, 25.51, false, 6, 7, 0, 8.53, 2.66, 4.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 17, 'AXM477', 25.59, 10.08, 25.65, false, 1, 2, 1, 20.12, 2.01, 17.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 1, 'AXM477', 28.08, 8.26, 26.03, false, 38, 6, 2, 8.77, 1.95, 3.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 5, 'AXM477', 26.29, 8.38, 26.91, false, 14, 18, 3, 16.42, 2.34, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 9, 'AXM477', 28.29, 7.91, 26.22, false, 1, 2, 2, 17.97, 2.27, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 13, 'AXM477', 27.18, 8.86, 26.41, false, 9, 12, 0, 17.20, 2.92, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 17, 'AXM477', 31.50, 8.25, 26.97, false, 4, 3, 2, 17.60, 2.22, 14.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 1, 'AXM477', 28.15, 7.22, 26.51, false, 27, 11, 4, 8.86, 1.63, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 5, 'AXM477', 29.99, 7.60, 26.59, false, 8, 15, 2, 9.81, 2.09, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 9, 'AXM477', 29.01, 8.76, 26.89, false, 31, 20, 5, 8.20, 1.83, 2.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 13, 'AXM477', 27.93, 7.05, 26.68, false, 12, 5, 1, 11.44, 2.66, 8.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 17, 'AXM477', 29.46, 7.06, 26.07, false, 24, 16, 5, 12.78, 2.52, 5.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 1, 'AXM477', 26.14, 7.76, 27.27, false, 24, 2, 5, 8.90, 2.29, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 5, 'AXM477', 27.89, 7.04, 26.22, false, 6, 19, 0, 10.62, 2.23, 10.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 9, 'AXM477', 27.60, 7.23, 26.83, false, 6, 9, 0, 8.92, 2.48, 7.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 13, 'AXM477', 27.15, 7.40, 26.70, false, 6, 8, 0, 8.65, 3.00, 4.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 17, 'AXM477', 28.61, 7.16, 26.37, false, 3, 2, 1, 20.14, 2.03, 17.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 1, 'AXM477', 28.70, 0.50, 22.24, false, 38, 7, 3, 8.79, 2.01, 3.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 5, 'AXM477', 26.39, 0.52, 22.03, false, 14, 19, 4, 16.46, 2.59, 3.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 9, 'AXM477', 29.61, 0.53, 22.33, false, 1, 3, 3, 17.97, 2.59, 15.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 13, 'AXM477', 29.61, 0.51, 22.20, false, 10, 13, 1, 17.26, 3.23, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 17, 'AXM477', 33.95, 0.53, 22.25, false, 4, 3, 3, 17.77, 2.54, 14.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 1, 'AXM477', 31.37, 0.49, 22.45, false, 27, 12, 4, 8.88, 1.97, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 5, 'AXM477', 31.01, 0.53, 22.24, false, 8, 16, 3, 9.98, 2.11, 5.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 9, 'AXM477', 30.76, 0.52, 22.18, false, 33, 20, 6, 8.30, 2.11, 2.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 13, 'AXM477', 28.85, 0.53, 22.16, false, 13, 5, 2, 11.45, 2.91, 8.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 17, 'AXM477', 31.64, 0.52, 22.42, false, 24, 17, 6, 12.95, 2.64, 5.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 1, 'AXM477', 26.52, 0.52, 22.46, false, 24, 3, 6, 9.06, 2.58, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 5, 'AXM477', 29.50, 0.52, 22.41, false, 7, 19, 0, 10.63, 2.50, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 9, 'AXM477', 28.50, 0.50, 22.46, false, 8, 10, 0, 9.10, 2.56, 7.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 13, 'AXM477', 28.08, 0.48, 22.12, false, 7, 9, 1, 8.67, 3.18, 4.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 17, 'AXM477', 30.56, 0.53, 22.26, false, 3, 2, 2, 20.27, 2.09, 17.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 1, 'AXM477', 24.31, 1.02, 21.43, false, 9, 17, 1, 8.70, 2.39, 8.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 5, 'AXM477', 23.91, 1.00, 20.82, false, 9, 6, 1, 18.39, 2.40, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 9, 'AXM477', 24.44, 1.03, 20.08, false, 10, 6, 1, 14.81, 2.26, 7.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 13, 'AXM477', 23.78, 0.99, 20.40, false, 2, 3, 0, 8.88, 1.55, 3.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 17, 'AXM477', 23.84, 0.98, 21.22, false, 4, 5, 0, 15.32, 2.35, 5.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 1, 'AXM477', 23.79, 0.99, 20.56, false, 41, 2, 3, 8.70, 2.15, 8.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 5, 'AXM477', 24.42, 1.00, 21.60, false, 7, 7, 1, 10.53, 1.92, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 9, 'AXM477', 23.95, 0.97, 21.82, false, 1, 1, 0, 17.01, 1.93, 13.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 13, 'AXM477', 24.01, 0.99, 21.18, false, 11, 12, 1, 13.93, 1.55, 11.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 17, 'AXM477', 23.79, 0.98, 21.48, false, 14, 15, 1, 12.47, 2.32, 4.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 1, 'AXM477', 23.76, 0.98, 21.47, false, 27, 20, 2, 8.70, 1.85, 8.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 5, 'AXM477', 24.39, 1.01, 21.92, false, 2, 13, 0, 19.59, 1.93, 17.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 9, 'AXM477', 24.42, 1.02, 21.60, false, 15, 14, 3, 19.82, 1.58, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 13, 'AXM477', 23.85, 1.02, 21.05, false, 8, 7, 0, 9.02, 2.25, 4.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 17, 'AXM477', 24.41, 1.01, 21.22, false, 13, 16, 1, 11.23, 2.38, 11.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 1, 'AXM477', 25.32, 9.64, 25.37, false, 11, 18, 2, 8.89, 2.53, 8.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 5, 'AXM477', 26.32, 10.05, 24.19, false, 10, 6, 1, 18.42, 2.42, 16.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 9, 'AXM477', 27.24, 10.38, 25.10, false, 10, 6, 2, 14.92, 2.57, 7.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 13, 'AXM477', 24.79, 10.18, 24.66, false, 2, 4, 1, 9.04, 1.93, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 17, 'AXM477', 27.11, 9.93, 24.11, false, 6, 5, 0, 15.36, 2.42, 5.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 1, 'AXM477', 26.99, 10.46, 25.03, false, 42, 2, 4, 8.70, 2.21, 8.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 5, 'AXM477', 24.49, 9.84, 25.39, false, 9, 8, 2, 10.57, 2.16, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 9, 'AXM477', 24.68, 9.89, 25.31, false, 1, 1, 0, 17.06, 1.99, 13.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 13, 'AXM477', 24.86, 10.26, 24.95, false, 13, 13, 1, 13.98, 1.66, 11.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 17, 'AXM477', 25.35, 10.15, 24.71, false, 16, 15, 1, 12.48, 2.64, 4.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 1, 'AXM477', 24.06, 9.74, 24.75, false, 29, 20, 2, 8.77, 2.20, 8.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 5, 'AXM477', 28.30, 10.31, 24.44, false, 2, 13, 0, 19.77, 2.28, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 9, 'AXM477', 28.19, 10.12, 24.32, false, 15, 15, 4, 19.93, 1.93, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 13, 'AXM477', 27.76, 10.36, 25.46, false, 10, 8, 0, 9.14, 2.65, 4.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 17, 'AXM477', 27.18, 10.18, 24.76, false, 14, 16, 1, 11.25, 2.65, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 1, 'AXM477', 28.10, 8.83, 26.45, false, 11, 19, 2, 8.95, 2.57, 8.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 5, 'AXM477', 30.16, 8.98, 26.51, false, 10, 7, 1, 18.57, 2.74, 16.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 9, 'AXM477', 27.94, 7.89, 27.07, false, 12, 7, 3, 14.95, 2.91, 7.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 13, 'AXM477', 25.62, 8.28, 27.05, false, 2, 4, 1, 9.13, 2.21, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 17, 'AXM477', 28.85, 8.87, 27.30, false, 8, 6, 1, 15.55, 2.63, 6.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 1, 'AXM477', 30.97, 8.40, 26.69, false, 42, 2, 4, 8.78, 2.41, 8.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 5, 'AXM477', 25.32, 7.57, 26.19, false, 9, 9, 3, 10.69, 2.35, 3.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 9, 'AXM477', 25.26, 7.88, 26.39, false, 2, 2, 1, 17.16, 2.12, 14.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 13, 'AXM477', 28.79, 8.60, 26.35, false, 13, 13, 2, 14.17, 1.71, 11.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 17, 'AXM477', 27.14, 7.03, 26.16, false, 18, 15, 2, 12.65, 2.72, 4.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 1, 'AXM477', 24.90, 8.68, 26.64, false, 30, 20, 3, 8.80, 2.39, 8.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 5, 'AXM477', 29.69, 7.37, 26.62, false, 3, 14, 0, 19.89, 2.56, 17.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 9, 'AXM477', 31.14, 8.86, 26.80, false, 17, 15, 5, 20.04, 2.01, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 13, 'AXM477', 31.37, 7.71, 27.22, false, 10, 8, 0, 9.21, 3.04, 4.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 17, 'AXM477', 30.21, 7.46, 26.75, false, 16, 16, 1, 11.41, 2.67, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 1, 'AXM477', 32.06, 0.51, 22.22, false, 11, 19, 3, 8.98, 2.61, 8.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 5, 'AXM477', 31.19, 0.50, 22.43, false, 12, 7, 1, 18.72, 3.08, 17.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 9, 'AXM477', 29.48, 0.51, 22.11, false, 13, 8, 3, 15.13, 3.08, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 13, 'AXM477', 26.83, 0.52, 22.20, false, 4, 5, 2, 9.15, 2.61, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 17, 'AXM477', 30.44, 0.50, 22.40, false, 10, 6, 1, 15.56, 2.86, 6.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 1, 'AXM477', 33.39, 0.49, 22.26, false, 42, 3, 4, 8.83, 2.81, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 5, 'AXM477', 28.80, 0.50, 22.18, false, 10, 10, 4, 10.75, 2.53, 3.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 9, 'AXM477', 26.51, 0.53, 22.29, false, 4, 2, 2, 17.30, 2.43, 14.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 13, 'AXM477', 32.26, 0.52, 22.38, false, 15, 13, 2, 14.26, 2.05, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 17, 'AXM477', 29.30, 0.53, 22.41, false, 19, 15, 3, 12.70, 2.73, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 1, 'AXM477', 26.40, 0.53, 22.16, false, 32, 20, 3, 8.92, 2.73, 8.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 5, 'AXM477', 33.55, 0.52, 22.42, false, 4, 14, 1, 19.92, 2.70, 17.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 9, 'AXM477', 31.65, 0.49, 22.42, false, 19, 15, 6, 20.05, 2.18, 8.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 13, 'AXM477', 32.62, 0.47, 22.44, false, 12, 9, 0, 9.32, 3.19, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 17, 'AXM477', 32.27, 0.49, 22.21, false, 17, 17, 1, 11.58, 2.83, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 1, 'AXM477', 24.12, 0.98, 20.62, false, 44, 13, 0, 17.42, 3.97, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 5, 'AXM477', 24.17, 1.03, 20.66, false, 45, 20, 6, 18.93, 4.50, 6.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 9, 'AXM477', 24.04, 0.99, 21.67, false, 35, 13, 4, 11.66, 3.93, 11.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 13, 'AXM477', 23.66, 1.02, 20.56, false, 73, 20, 3, 10.61, 4.00, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 17, 'AXM477', 23.84, 1.00, 21.12, false, 51, 13, 3, 18.40, 4.21, 16.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 1, 'AXM477', 23.98, 1.02, 20.71, false, 54, 15, 6, 14.13, 4.04, 10.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 5, 'AXM477', 23.64, 0.97, 21.62, false, 13, 4, 1, 21.92, 3.92, 16.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 9, 'AXM477', 24.43, 1.00, 21.01, false, 71, 18, 10, 9.41, 4.35, 7.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 13, 'AXM477', 24.34, 1.03, 20.60, false, 29, 8, 3, 17.97, 3.70, 16.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 17, 'AXM477', 24.03, 1.00, 20.02, false, 13, 6, 2, 9.16, 3.91, 7.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 1, 'AXM477', 23.91, 1.01, 21.71, false, 12, 4, 2, 17.90, 4.14, 14.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 5, 'AXM477', 24.42, 1.02, 21.04, false, 34, 17, 2, 15.25, 3.65, 15.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 9, 'AXM477', 24.03, 1.00, 20.97, false, 53, 18, 10, 21.32, 3.86, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 13, 'AXM477', 23.86, 1.02, 20.11, false, 28, 8, 4, 14.02, 3.76, 6.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 17, 'AXM477', 24.21, 0.99, 20.86, false, 31, 11, 2, 10.62, 3.83, 10.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 1, 'AXM477', 25.44, 9.85, 24.67, false, 44, 13, 0, 17.51, 4.15, 7.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 5, 'AXM477', 24.17, 9.75, 25.75, false, 47, 20, 6, 19.08, 4.90, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 9, 'AXM477', 24.09, 9.95, 24.71, false, 36, 13, 4, 11.76, 4.23, 11.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 13, 'AXM477', 24.30, 10.23, 25.36, false, 75, 20, 3, 10.63, 4.11, 7.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 17, 'AXM477', 26.71, 9.66, 24.99, false, 51, 14, 3, 18.57, 4.42, 16.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 1, 'AXM477', 27.05, 10.13, 24.37, false, 55, 16, 7, 14.28, 4.12, 10.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 5, 'AXM477', 24.59, 10.50, 24.01, false, 14, 4, 2, 22.00, 3.96, 16.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 9, 'AXM477', 25.40, 9.63, 24.28, false, 73, 19, 10, 9.55, 4.55, 7.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 13, 'AXM477', 26.94, 10.06, 24.95, false, 30, 9, 4, 18.09, 3.74, 16.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 17, 'AXM477', 24.25, 9.95, 24.31, false, 15, 6, 2, 9.18, 4.30, 7.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 1, 'AXM477', 25.03, 10.17, 24.94, false, 13, 5, 2, 17.93, 4.26, 14.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 5, 'AXM477', 26.40, 9.54, 24.92, false, 35, 18, 2, 15.30, 3.69, 15.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 9, 'AXM477', 25.08, 9.68, 24.14, false, 55, 18, 10, 21.48, 3.98, 7.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 13, 'AXM477', 25.21, 9.82, 25.36, false, 29, 8, 4, 14.05, 4.15, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 17, 'AXM477', 24.84, 10.08, 25.32, false, 33, 12, 3, 10.80, 4.05, 10.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 1, 'AXM477', 27.59, 8.29, 27.42, false, 45, 14, 1, 17.63, 4.53, 7.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 5, 'AXM477', 27.39, 7.68, 26.86, false, 48, 20, 6, 19.18, 5.03, 7.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 9, 'AXM477', 26.84, 8.78, 27.05, false, 36, 13, 5, 11.92, 4.29, 11.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 13, 'AXM477', 27.50, 7.70, 26.73, false, 77, 20, 4, 10.71, 4.41, 7.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 17, 'AXM477', 27.51, 8.79, 26.52, false, 52, 14, 4, 18.64, 4.66, 16.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 1, 'AXM477', 27.84, 8.98, 26.43, false, 55, 16, 7, 14.37, 4.22, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 5, 'AXM477', 25.05, 7.60, 26.85, false, 14, 5, 3, 22.07, 4.14, 16.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 9, 'AXM477', 27.16, 8.38, 26.07, false, 75, 20, 10, 9.70, 4.57, 7.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 13, 'AXM477', 30.87, 7.73, 26.08, false, 31, 10, 5, 18.26, 3.83, 16.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 17, 'AXM477', 25.92, 7.81, 27.10, false, 17, 6, 2, 9.26, 4.48, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 1, 'AXM477', 28.03, 8.21, 26.26, false, 15, 5, 3, 18.02, 4.31, 14.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 5, 'AXM477', 27.44, 8.49, 26.68, false, 37, 19, 3, 15.43, 3.76, 15.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 9, 'AXM477', 26.61, 7.07, 26.49, false, 57, 18, 10, 21.55, 4.26, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 13, 'AXM477', 26.04, 8.88, 26.96, false, 30, 9, 4, 14.19, 4.15, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 17, 'AXM477', 26.34, 8.71, 26.73, false, 35, 13, 4, 10.95, 4.21, 10.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 1, 'AXM477', 28.75, 0.50, 22.18, false, 47, 15, 1, 17.75, 4.92, 7.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 5, 'AXM477', 29.10, 0.49, 22.45, false, 48, 20, 6, 19.21, 5.40, 7.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 9, 'AXM477', 28.36, 0.49, 22.09, false, 38, 14, 5, 11.99, 4.34, 11.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 13, 'AXM477', 31.35, 0.49, 22.41, false, 77, 20, 4, 10.84, 4.61, 7.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 17, 'AXM477', 28.46, 0.49, 22.11, false, 52, 14, 4, 18.69, 4.91, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 1, 'AXM477', 29.21, 0.50, 22.08, false, 56, 17, 8, 14.53, 4.34, 10.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 5, 'AXM477', 26.16, 0.50, 22.14, false, 14, 5, 3, 22.15, 4.24, 16.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 9, 'AXM477', 29.48, 0.49, 22.08, false, 76, 20, 10, 9.76, 4.58, 7.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 13, 'AXM477', 33.78, 0.52, 22.28, false, 32, 10, 5, 18.39, 4.19, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 17, 'AXM477', 29.57, 0.48, 22.19, false, 19, 6, 2, 9.36, 4.78, 7.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 1, 'AXM477', 31.62, 0.48, 22.13, false, 17, 6, 3, 18.12, 4.53, 14.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 5, 'AXM477', 30.35, 0.53, 22.34, false, 37, 20, 4, 15.46, 3.93, 15.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 9, 'AXM477', 29.32, 0.53, 22.09, false, 58, 19, 10, 21.60, 4.54, 7.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 13, 'AXM477', 27.51, 0.51, 22.14, false, 30, 9, 4, 14.36, 4.28, 6.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 17, 'AXM477', 27.70, 0.52, 22.37, false, 35, 14, 5, 10.95, 4.50, 10.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 1, 'AXM477', 24.12, 1.00, 20.17, false, 62, 15, 13, 16.04, 5.53, 12.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 5, 'AXM477', 24.15, 0.99, 21.90, false, 70, 19, 7, 16.18, 5.74, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 9, 'AXM477', 24.46, 0.99, 20.73, false, 31, 9, 6, 21.63, 5.78, 17.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 13, 'AXM477', 23.95, 1.02, 21.02, false, 62, 17, 4, 20.24, 5.86, 14.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 17, 'AXM477', 23.87, 1.01, 20.05, false, 43, 14, 5, 12.72, 6.43, 8.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 1, 'AXM477', 24.15, 1.00, 20.26, false, 70, 17, 11, 14.83, 6.06, 11.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 5, 'AXM477', 24.31, 1.01, 20.62, false, 48, 13, 6, 21.17, 6.15, 14.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 9, 'AXM477', 23.99, 1.02, 21.50, false, 32, 9, 3, 14.15, 5.87, 11.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 13, 'AXM477', 24.32, 1.00, 20.67, false, 48, 10, 2, 16.47, 5.53, 10.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 17, 'AXM477', 23.75, 0.97, 21.84, false, 82, 20, 6, 16.39, 5.55, 6.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 1, 'AXM477', 24.36, 1.01, 20.37, false, 23, 7, 5, 11.82, 5.50, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 5, 'AXM477', 24.27, 0.99, 21.31, false, 31, 9, 7, 20.18, 6.15, 8.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 9, 'AXM477', 24.05, 1.01, 21.47, false, 59, 15, 1, 13.06, 5.68, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 13, 'AXM477', 23.63, 1.01, 20.71, false, 49, 16, 5, 22.26, 6.48, 12.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 17, 'AXM477', 24.34, 0.99, 20.73, false, 55, 14, 1, 17.10, 6.04, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 1, 'AXM477', 27.87, 10.46, 25.44, false, 62, 16, 14, 16.09, 5.89, 12.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 5, 'AXM477', 25.95, 9.73, 25.41, false, 71, 19, 8, 16.21, 5.78, 7.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 9, 'AXM477', 25.32, 9.90, 25.53, false, 31, 9, 7, 21.70, 6.01, 17.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 13, 'AXM477', 27.44, 10.45, 26.11, false, 63, 17, 5, 20.30, 5.95, 14.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 17, 'AXM477', 27.30, 10.33, 24.49, false, 43, 14, 5, 12.81, 6.81, 8.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 1, 'AXM477', 26.99, 10.14, 24.36, false, 71, 18, 11, 14.89, 6.37, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 5, 'AXM477', 26.27, 9.90, 24.34, false, 48, 13, 6, 21.29, 6.53, 14.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 9, 'AXM477', 27.40, 9.87, 25.87, false, 32, 9, 4, 14.35, 5.94, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 13, 'AXM477', 28.05, 9.67, 25.20, false, 50, 10, 3, 16.62, 5.81, 10.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 17, 'AXM477', 27.49, 9.91, 24.42, false, 83, 20, 6, 16.43, 5.77, 6.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 1, 'AXM477', 25.20, 10.20, 25.72, false, 24, 8, 5, 11.89, 5.61, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 5, 'AXM477', 26.26, 10.48, 24.27, false, 33, 10, 8, 20.23, 6.52, 8.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 9, 'AXM477', 27.97, 9.77, 24.25, false, 61, 15, 1, 13.22, 5.95, 7.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 13, 'AXM477', 27.38, 9.99, 24.38, false, 50, 16, 5, 22.43, 6.67, 12.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 17, 'AXM477', 24.59, 10.34, 24.85, false, 57, 14, 2, 17.20, 6.30, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 1, 'AXM477', 31.17, 7.49, 26.43, false, 62, 16, 15, 16.23, 5.90, 12.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 5, 'AXM477', 29.83, 7.16, 26.24, false, 72, 20, 8, 16.27, 6.04, 7.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 9, 'AXM477', 27.09, 8.07, 26.31, false, 33, 10, 7, 21.79, 6.05, 17.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 13, 'AXM477', 28.44, 8.72, 26.09, false, 65, 18, 5, 20.41, 6.14, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 17, 'AXM477', 27.58, 7.33, 26.03, false, 43, 15, 5, 12.92, 7.00, 8.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 1, 'AXM477', 30.62, 7.89, 27.04, false, 73, 19, 11, 14.99, 6.47, 11.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 5, 'AXM477', 27.67, 8.53, 26.16, false, 48, 14, 7, 21.41, 6.64, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 9, 'AXM477', 29.53, 7.86, 26.45, false, 33, 9, 4, 14.41, 6.09, 11.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 13, 'AXM477', 30.68, 7.78, 26.66, false, 51, 10, 3, 16.66, 6.13, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 17, 'AXM477', 28.97, 8.80, 26.93, false, 84, 20, 6, 16.45, 5.90, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 1, 'AXM477', 27.81, 8.19, 26.18, false, 26, 8, 5, 12.07, 5.80, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 5, 'AXM477', 29.41, 8.77, 27.47, false, 33, 11, 8, 20.27, 6.88, 8.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 9, 'AXM477', 31.21, 8.63, 26.43, false, 61, 15, 1, 13.27, 6.29, 7.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 13, 'AXM477', 27.74, 7.61, 26.11, false, 51, 17, 6, 22.59, 6.72, 12.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 17, 'AXM477', 26.50, 8.45, 27.55, false, 58, 14, 2, 17.23, 6.61, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 1, 'AXM477', 33.57, 0.52, 22.04, false, 64, 16, 16, 16.42, 6.07, 12.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 5, 'AXM477', 29.84, 0.53, 22.39, false, 73, 20, 8, 16.39, 6.20, 7.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 9, 'AXM477', 30.93, 0.50, 22.38, false, 35, 10, 7, 21.92, 6.32, 17.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 13, 'AXM477', 31.55, 0.49, 22.45, false, 65, 19, 6, 20.60, 6.49, 14.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 17, 'AXM477', 29.73, 0.50, 22.27, false, 43, 16, 6, 12.97, 7.30, 8.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 1, 'AXM477', 34.38, 0.52, 22.53, false, 75, 19, 11, 15.09, 6.79, 11.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 5, 'AXM477', 28.89, 0.53, 22.42, false, 48, 14, 8, 21.49, 6.76, 14.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 9, 'AXM477', 31.16, 0.51, 22.52, false, 33, 10, 4, 14.45, 6.20, 11.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 13, 'AXM477', 34.05, 0.50, 22.44, false, 51, 11, 3, 16.85, 6.17, 10.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 17, 'AXM477', 29.25, 0.49, 22.46, false, 85, 20, 7, 16.59, 6.21, 6.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 1, 'AXM477', 31.05, 0.51, 22.07, false, 26, 9, 5, 12.08, 6.02, 11.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 5, 'AXM477', 29.68, 0.52, 22.17, false, 33, 11, 9, 20.39, 7.07, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 9, 'AXM477', 35.09, 0.50, 22.16, false, 62, 16, 1, 13.28, 6.42, 7.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 13, 'AXM477', 29.61, 0.49, 22.39, false, 53, 18, 7, 22.77, 6.94, 12.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 17, 'AXM477', 29.17, 0.49, 22.17, false, 60, 15, 2, 17.36, 6.67, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 1, 'AXM477', 23.82, 1.03, 21.47, false, 90, 17, 6, 25.46, 8.28, 18.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 5, 'AXM477', 23.58, 0.97, 21.19, false, 111, 16, 12, 21.77, 7.95, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 9, 'AXM477', 24.37, 0.97, 21.73, false, 117, 20, 4, 19.77, 7.67, 10.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 13, 'AXM477', 24.33, 1.00, 20.39, false, 88, 13, 16, 21.29, 8.09, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 17, 'AXM477', 24.44, 0.97, 21.38, false, 65, 11, 7, 14.28, 8.05, 8.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 1, 'AXM477', 24.23, 1.03, 22.04, false, 120, 18, 11, 24.31, 7.87, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 5, 'AXM477', 23.55, 1.00, 21.21, false, 61, 10, 13, 25.16, 8.43, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 9, 'AXM477', 24.29, 1.03, 21.43, false, 122, 20, 2, 16.89, 7.80, 14.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 13, 'AXM477', 23.58, 1.01, 20.48, false, 71, 13, 14, 23.35, 8.45, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 17, 'AXM477', 23.63, 0.98, 20.26, false, 101, 18, 21, 13.22, 7.69, 8.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 1, 'AXM477', 24.42, 1.00, 21.67, false, 113, 20, 12, 18.05, 8.08, 15.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 5, 'AXM477', 24.37, 1.03, 21.59, false, 109, 20, 22, 14.69, 8.11, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 9, 'AXM477', 24.21, 1.00, 21.20, false, 53, 10, 12, 17.05, 8.36, 15.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 13, 'AXM477', 24.40, 1.02, 21.30, false, 111, 20, 19, 17.41, 7.60, 9.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 17, 'AXM477', 24.46, 0.99, 21.81, false, 92, 18, 14, 19.01, 7.98, 8.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 1, 'AXM477', 26.73, 10.29, 25.88, false, 92, 17, 6, 25.49, 8.33, 18.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 5, 'AXM477', 25.29, 10.22, 26.08, false, 113, 17, 13, 21.88, 8.12, 11.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 9, 'AXM477', 24.44, 10.44, 25.59, false, 118, 20, 4, 19.92, 7.88, 10.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 13, 'AXM477', 27.25, 10.20, 25.14, false, 90, 13, 17, 21.43, 8.20, 9.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 17, 'AXM477', 28.28, 10.41, 25.36, false, 67, 12, 8, 14.47, 8.09, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 1, 'AXM477', 26.06, 10.17, 24.90, false, 120, 18, 11, 24.45, 7.89, 14.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 5, 'AXM477', 26.91, 10.02, 24.59, false, 63, 11, 14, 25.34, 8.80, 17.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 9, 'AXM477', 25.15, 9.58, 25.83, false, 124, 20, 3, 17.03, 7.91, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 13, 'AXM477', 26.39, 10.29, 24.98, false, 71, 14, 14, 23.45, 8.56, 14.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 17, 'AXM477', 24.87, 10.01, 25.54, false, 101, 19, 22, 13.33, 7.79, 8.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 1, 'AXM477', 27.19, 9.51, 24.58, false, 113, 20, 12, 18.09, 8.46, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 5, 'AXM477', 27.09, 10.22, 25.94, false, 109, 20, 22, 14.87, 8.45, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 9, 'AXM477', 24.45, 9.85, 25.28, false, 54, 10, 13, 17.07, 8.65, 15.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 13, 'AXM477', 27.61, 9.86, 24.90, false, 112, 20, 19, 17.55, 7.92, 9.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 17, 'AXM477', 24.56, 9.76, 25.54, false, 92, 18, 14, 19.14, 8.10, 8.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 1, 'AXM477', 28.15, 8.69, 26.18, false, 94, 17, 7, 25.59, 8.43, 18.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 5, 'AXM477', 27.85, 8.84, 27.73, false, 114, 17, 13, 22.02, 8.52, 11.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 9, 'AXM477', 25.53, 7.79, 26.51, false, 120, 20, 5, 20.09, 8.00, 10.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 13, 'AXM477', 29.67, 8.90, 26.26, false, 92, 14, 18, 21.47, 8.35, 9.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 17, 'AXM477', 29.82, 8.23, 26.79, false, 69, 13, 8, 14.66, 8.16, 8.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 1, 'AXM477', 26.93, 7.18, 26.53, false, 121, 19, 12, 24.62, 8.19, 14.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 5, 'AXM477', 30.35, 8.54, 27.40, false, 63, 11, 14, 25.51, 8.95, 17.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 9, 'AXM477', 26.66, 7.78, 27.33, false, 124, 20, 3, 17.19, 8.25, 15.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 13, 'AXM477', 29.40, 8.76, 27.59, false, 72, 15, 15, 23.47, 8.69, 14.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 17, 'AXM477', 26.73, 8.89, 27.19, false, 101, 19, 23, 13.35, 7.92, 8.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 1, 'AXM477', 31.07, 7.06, 26.10, false, 115, 20, 13, 18.25, 8.61, 15.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 5, 'AXM477', 30.74, 7.81, 26.26, false, 110, 20, 23, 15.06, 8.81, 11.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 9, 'AXM477', 25.11, 8.23, 27.16, false, 56, 11, 13, 17.13, 8.79, 16.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 13, 'AXM477', 30.25, 7.79, 26.30, false, 113, 20, 20, 17.56, 7.94, 9.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 17, 'AXM477', 26.31, 7.11, 26.79, false, 92, 19, 15, 19.33, 8.29, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 1, 'AXM477', 29.16, 0.47, 22.32, false, 96, 18, 8, 25.74, 8.50, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 5, 'AXM477', 30.19, 0.52, 22.19, false, 116, 17, 14, 22.09, 8.55, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 9, 'AXM477', 26.34, 0.50, 22.19, false, 120, 20, 6, 20.19, 8.20, 10.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 13, 'AXM477', 32.29, 0.47, 22.06, false, 94, 14, 19, 21.60, 8.61, 9.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 17, 'AXM477', 30.65, 0.52, 22.04, false, 71, 14, 9, 14.68, 8.51, 8.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 1, 'AXM477', 27.06, 0.52, 22.40, false, 123, 19, 12, 24.81, 8.34, 14.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 5, 'AXM477', 31.94, 0.48, 22.38, false, 63, 11, 15, 25.55, 9.20, 17.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 9, 'AXM477', 30.16, 0.52, 22.11, false, 125, 20, 3, 17.29, 8.47, 15.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 13, 'AXM477', 30.23, 0.49, 22.25, false, 74, 15, 15, 23.49, 8.93, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 17, 'AXM477', 30.69, 0.48, 22.06, false, 101, 20, 23, 13.54, 8.22, 8.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 1, 'AXM477', 33.88, 0.53, 22.33, false, 116, 20, 13, 18.25, 8.77, 15.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 5, 'AXM477', 31.91, 0.48, 22.37, false, 112, 20, 24, 15.25, 9.17, 11.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 9, 'AXM477', 26.94, 0.52, 22.19, false, 56, 12, 14, 17.15, 8.95, 16.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 13, 'AXM477', 33.03, 0.50, 22.47, false, 114, 20, 20, 17.69, 8.00, 9.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 17, 'AXM477', 26.84, 0.51, 22.25, false, 93, 19, 16, 19.51, 8.66, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 1, 'AXM477', 23.94, 0.97, 21.25, false, 183, 20, 38, 23.54, 11.51, 19.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 5, 'AXM477', 24.32, 0.98, 20.86, false, 194, 20, 23, 23.63, 12.26, 18.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 9, 'AXM477', 24.10, 1.02, 21.21, false, 113, 12, 19, 27.45, 11.78, 19.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 13, 'AXM477', 23.53, 1.03, 20.15, false, 182, 20, 28, 29.58, 11.85, 29.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 17, 'AXM477', 24.11, 1.01, 20.59, false, 159, 19, 33, 28.16, 11.62, 20.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 1, 'AXM477', 23.89, 0.98, 21.35, false, 191, 20, 29, 19.07, 12.07, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 5, 'AXM477', 23.73, 1.00, 20.61, false, 190, 20, 38, 17.98, 11.91, 12.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 9, 'AXM477', 24.15, 1.01, 20.24, false, 197, 20, 23, 21.64, 12.42, 15.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 13, 'AXM477', 24.46, 0.99, 21.09, false, 135, 14, 6, 21.25, 11.53, 16.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 17, 'AXM477', 24.45, 0.99, 20.85, false, 183, 19, 29, 18.33, 11.93, 13.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 1, 'AXM477', 24.17, 1.00, 21.07, false, 187, 19, 3, 23.25, 12.38, 21.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 5, 'AXM477', 24.44, 1.02, 20.60, false, 177, 20, 22, 22.40, 11.89, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 9, 'AXM477', 23.77, 1.03, 20.03, false, 163, 20, 2, 24.86, 12.42, 14.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 13, 'AXM477', 23.96, 0.98, 21.06, false, 110, 13, 4, 25.14, 11.52, 21.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 17, 'AXM477', 23.60, 1.02, 20.25, false, 168, 20, 3, 24.35, 12.22, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 1, 'AXM477', 24.52, 9.79, 24.00, false, 184, 20, 39, 23.62, 11.73, 19.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 5, 'AXM477', 24.91, 10.16, 24.96, false, 195, 20, 24, 23.65, 12.42, 18.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 9, 'AXM477', 27.42, 9.85, 25.57, false, 115, 12, 20, 27.52, 11.89, 19.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 13, 'AXM477', 26.88, 10.45, 24.62, false, 184, 20, 28, 29.61, 11.96, 29.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 17, 'AXM477', 26.87, 9.85, 25.72, false, 160, 19, 34, 28.34, 11.72, 20.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 1, 'AXM477', 26.24, 10.24, 24.66, false, 191, 20, 29, 19.22, 12.08, 13.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 5, 'AXM477', 24.68, 9.68, 25.21, false, 190, 20, 39, 18.15, 12.29, 12.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 9, 'AXM477', 27.49, 10.14, 26.01, false, 199, 20, 23, 21.70, 12.74, 15.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 13, 'AXM477', 27.75, 9.77, 25.73, false, 137, 14, 6, 21.29, 11.93, 16.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 17, 'AXM477', 27.12, 10.15, 24.33, false, 183, 19, 30, 18.41, 12.16, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 1, 'AXM477', 27.75, 10.17, 24.17, false, 189, 19, 3, 23.36, 12.53, 21.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 5, 'AXM477', 24.63, 9.77, 24.62, false, 178, 20, 23, 22.51, 12.22, 13.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 9, 'AXM477', 26.25, 10.49, 24.36, false, 163, 20, 3, 24.96, 12.61, 14.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 13, 'AXM477', 26.35, 9.93, 25.81, false, 111, 13, 5, 25.23, 11.72, 21.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 17, 'AXM477', 25.36, 10.23, 24.18, false, 169, 20, 3, 24.49, 12.49, 14.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 1, 'AXM477', 26.05, 8.75, 27.61, false, 186, 20, 39, 23.64, 11.91, 19.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 5, 'AXM477', 25.83, 8.90, 27.17, false, 195, 20, 24, 23.76, 12.77, 18.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 9, 'AXM477', 29.86, 8.32, 26.21, false, 115, 12, 20, 27.56, 12.15, 20.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 13, 'AXM477', 27.71, 8.91, 27.41, false, 185, 20, 28, 29.80, 12.33, 29.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 17, 'AXM477', 30.77, 7.49, 26.22, false, 160, 20, 35, 28.49, 12.04, 20.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 1, 'AXM477', 27.02, 7.44, 26.84, false, 193, 20, 29, 19.36, 12.30, 13.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 5, 'AXM477', 26.30, 7.33, 26.55, false, 191, 20, 40, 18.28, 12.59, 12.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 9, 'AXM477', 29.75, 7.34, 26.40, false, 201, 20, 23, 21.84, 12.81, 15.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 13, 'AXM477', 29.06, 7.03, 26.87, false, 138, 14, 7, 21.30, 12.16, 16.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 17, 'AXM477', 28.26, 7.10, 26.74, false, 185, 20, 31, 18.60, 12.20, 13.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 1, 'AXM477', 29.69, 7.35, 26.54, false, 189, 20, 4, 23.46, 12.69, 21.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 5, 'AXM477', 28.55, 7.82, 27.25, false, 179, 20, 24, 22.59, 12.41, 13.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 9, 'AXM477', 27.01, 8.77, 26.86, false, 164, 20, 3, 25.00, 12.85, 14.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 13, 'AXM477', 29.77, 7.83, 26.73, false, 111, 14, 6, 25.27, 11.79, 21.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 17, 'AXM477', 27.22, 7.22, 26.02, false, 169, 20, 4, 24.56, 12.79, 14.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 1, 'AXM477', 26.55, 0.52, 22.10, false, 188, 20, 39, 23.75, 11.94, 19.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 5, 'AXM477', 26.95, 0.50, 22.40, false, 196, 20, 24, 23.93, 12.89, 18.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 9, 'AXM477', 30.45, 0.48, 22.17, false, 116, 12, 21, 27.72, 12.23, 20.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 13, 'AXM477', 29.09, 0.49, 22.15, false, 186, 20, 29, 29.85, 12.57, 29.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 17, 'AXM477', 33.86, 0.47, 22.34, false, 161, 20, 36, 28.53, 12.06, 20.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 1, 'AXM477', 30.58, 0.47, 22.36, false, 195, 20, 29, 19.39, 12.61, 13.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 5, 'AXM477', 26.67, 0.48, 22.18, false, 191, 20, 41, 18.37, 12.62, 13.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 9, 'AXM477', 32.84, 0.47, 22.40, false, 201, 20, 24, 22.02, 12.89, 15.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 13, 'AXM477', 29.93, 0.52, 22.30, false, 140, 15, 8, 21.36, 12.40, 17.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 17, 'AXM477', 31.55, 0.51, 22.26, false, 187, 20, 32, 18.71, 12.38, 13.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 1, 'AXM477', 32.04, 0.48, 22.23, false, 190, 20, 4, 23.66, 13.06, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 5, 'AXM477', 31.72, 0.52, 22.50, false, 179, 20, 24, 22.67, 12.63, 13.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 9, 'AXM477', 28.56, 0.51, 22.40, false, 166, 20, 3, 25.04, 13.10, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 13, 'AXM477', 30.13, 0.53, 22.01, false, 112, 14, 6, 25.37, 12.08, 21.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 17, 'AXM477', 27.97, 0.50, 22.22, false, 170, 20, 4, 24.60, 13.18, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 1, 'AXM477', 24.39, 1.01, 20.05, false, 249, 20, 3, 25.59, 16.03, 16.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 5, 'AXM477', 23.56, 0.99, 21.34, false, 236, 20, 45, 26.93, 16.26, 19.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 9, 'AXM477', 24.30, 1.00, 21.39, false, 154, 12, 21, 24.44, 15.68, 19.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 13, 'AXM477', 24.29, 0.99, 20.88, false, 238, 20, 14, 26.03, 15.55, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 17, 'AXM477', 23.99, 1.01, 20.88, false, 243, 19, 34, 25.51, 15.83, 22.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 1, 'AXM477', 23.56, 1.02, 20.66, false, 253, 20, 27, 28.51, 15.82, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 5, 'AXM477', 24.40, 1.01, 20.99, false, 230, 20, 10, 27.00, 15.61, 18.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 9, 'AXM477', 23.87, 0.98, 21.80, false, 246, 20, 43, 24.96, 15.58, 22.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 13, 'AXM477', 24.02, 1.01, 20.87, false, 155, 14, 29, 30.91, 16.04, 29.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 17, 'AXM477', 23.54, 0.99, 21.54, false, 236, 19, 20, 31.11, 16.25, 29.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 1, 'AXM477', 24.27, 1.02, 21.15, false, 234, 19, 49, 31.18, 16.32, 30.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 5, 'AXM477', 23.69, 0.99, 21.06, false, 230, 20, 15, 30.05, 16.50, 28.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 9, 'AXM477', 23.75, 1.02, 21.02, false, 221, 20, 35, 32.69, 16.29, 21.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 13, 'AXM477', 23.63, 1.01, 20.72, false, 161, 13, 26, 21.83, 15.94, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 17, 'AXM477', 24.19, 0.99, 21.44, false, 229, 20, 23, 26.65, 16.49, 16.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 1, 'AXM477', 25.58, 10.34, 25.47, false, 250, 20, 3, 25.60, 16.18, 17.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 5, 'AXM477', 27.43, 10.16, 24.78, false, 238, 20, 46, 27.05, 16.62, 19.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 9, 'AXM477', 27.63, 9.82, 24.67, false, 155, 12, 21, 24.60, 15.96, 19.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 13, 'AXM477', 26.35, 10.03, 24.38, false, 240, 20, 15, 26.07, 15.85, 18.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 17, 'AXM477', 27.39, 9.72, 24.20, false, 244, 19, 34, 25.66, 16.07, 22.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 1, 'AXM477', 24.03, 9.61, 25.78, false, 255, 20, 27, 28.53, 16.18, 20.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 5, 'AXM477', 25.12, 9.76, 24.79, false, 231, 20, 11, 27.14, 15.67, 18.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 9, 'AXM477', 27.10, 9.87, 25.12, false, 246, 20, 43, 25.00, 15.95, 22.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 13, 'AXM477', 25.59, 9.94, 25.71, false, 157, 14, 29, 31.06, 16.31, 30.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 17, 'AXM477', 25.25, 10.07, 25.03, false, 237, 19, 21, 31.28, 16.36, 30.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 1, 'AXM477', 28.18, 10.41, 24.09, false, 235, 19, 49, 31.32, 16.36, 30.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 5, 'AXM477', 25.52, 9.51, 25.01, false, 231, 20, 15, 30.08, 16.72, 28.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 9, 'AXM477', 25.82, 9.98, 24.28, false, 222, 20, 35, 32.71, 16.62, 21.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 13, 'AXM477', 24.71, 10.25, 25.58, false, 162, 13, 27, 21.94, 16.18, 17.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 17, 'AXM477', 26.46, 10.48, 24.06, false, 231, 20, 24, 26.65, 16.65, 16.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 1, 'AXM477', 29.10, 8.18, 27.16, false, 251, 20, 4, 25.73, 16.57, 17.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 5, 'AXM477', 28.29, 7.74, 26.43, false, 240, 20, 46, 27.09, 16.63, 19.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 9, 'AXM477', 28.74, 7.05, 26.55, false, 155, 12, 22, 24.71, 16.03, 19.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 13, 'AXM477', 29.89, 7.06, 26.34, false, 240, 20, 15, 26.20, 16.03, 18.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 17, 'AXM477', 28.77, 7.84, 27.31, false, 246, 20, 34, 25.78, 16.24, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 1, 'AXM477', 26.73, 8.96, 27.27, false, 255, 20, 27, 28.73, 16.51, 20.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 5, 'AXM477', 26.94, 8.84, 27.71, false, 233, 20, 11, 27.26, 15.75, 19.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 9, 'AXM477', 27.99, 7.61, 27.04, false, 246, 20, 44, 25.03, 16.10, 22.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 13, 'AXM477', 25.63, 7.20, 26.01, false, 158, 14, 29, 31.22, 16.49, 30.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 17, 'AXM477', 26.39, 7.56, 27.23, false, 239, 20, 21, 31.29, 16.70, 30.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 1, 'AXM477', 30.94, 8.88, 27.49, false, 235, 20, 49, 31.40, 16.68, 30.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 5, 'AXM477', 26.48, 8.99, 27.35, false, 231, 20, 15, 30.13, 17.11, 28.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 9, 'AXM477', 28.60, 8.42, 26.11, false, 224, 20, 36, 32.81, 16.84, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 13, 'AXM477', 28.41, 8.73, 27.06, false, 162, 14, 27, 21.95, 16.36, 17.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 17, 'AXM477', 28.07, 8.06, 26.43, false, 231, 20, 24, 26.72, 16.69, 16.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 1, 'AXM477', 30.77, 0.51, 22.17, false, 253, 20, 4, 25.87, 16.92, 17.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 5, 'AXM477', 28.93, 0.52, 22.27, false, 241, 20, 46, 27.23, 16.96, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 9, 'AXM477', 31.25, 0.51, 22.37, false, 157, 12, 22, 24.90, 16.13, 20.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 13, 'AXM477', 33.67, 0.50, 22.07, false, 242, 20, 15, 26.31, 16.39, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 17, 'AXM477', 32.71, 0.47, 22.35, false, 247, 20, 34, 25.97, 16.51, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 1, 'AXM477', 30.49, 0.52, 22.41, false, 256, 20, 27, 28.92, 16.58, 20.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 5, 'AXM477', 27.98, 0.52, 22.12, false, 234, 20, 11, 27.38, 16.07, 19.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 9, 'AXM477', 31.00, 0.50, 22.23, false, 247, 20, 44, 25.19, 16.38, 22.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 13, 'AXM477', 27.04, 0.52, 22.02, false, 159, 15, 30, 31.39, 16.55, 30.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 17, 'AXM477', 28.65, 0.50, 22.33, false, 240, 20, 21, 31.45, 16.86, 30.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 1, 'AXM477', 31.78, 0.48, 22.22, false, 235, 20, 50, 31.54, 16.83, 30.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 5, 'AXM477', 28.89, 0.47, 22.30, false, 232, 20, 16, 30.20, 17.48, 28.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 9, 'AXM477', 31.88, 0.52, 22.31, false, 226, 20, 37, 32.98, 17.09, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 13, 'AXM477', 31.10, 0.52, 22.50, false, 163, 14, 27, 22.10, 16.51, 17.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 17, 'AXM477', 29.96, 0.52, 22.02, false, 233, 20, 24, 26.90, 16.84, 16.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 10, 'AXM478', 26.92, 10.01, 24.24, false, 22, 20, 2, 13.66, 2.09, 5.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 10, 'AXM478', 23.55, 0.99, 20.95, false, 14, 10, 3, 9.26, 1.52, 2.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 10, 'AXM478', 27.55, 0.51, 22.23, false, 15, 13, 4, 9.35, 1.94, 2.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 10, 'AXM478', 24.40, 7.02, 26.35, false, 42, 19, 6, 20.92, 4.27, 10.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 10, 'AXM478', 28.03, 10.23, 24.12, false, 55, 12, 5, 18.69, 6.06, 15.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 10, 'AXM478', 24.03, 1.02, 21.45, false, 120, 20, 5, 20.82, 7.80, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 10, 'AXM478', 26.61, 0.48, 22.44, false, 124, 20, 7, 21.20, 8.64, 14.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 10, 'AXM478', 29.35, 8.28, 27.39, false, 173, 20, 20, 17.53, 12.25, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 10, 'AXM478', 28.31, 10.20, 24.17, false, 245, 20, 47, 29.90, 15.95, 22.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 8, 'AXM480', 27.54, 9.60, 24.62, false, 13, 9, 2, 9.96, 2.51, 7.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 8, 'AXM480', 23.84, 1.00, 21.23, false, 2, 11, 0, 9.69, 1.76, 4.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 8, 'AXM480', 29.24, 0.48, 22.21, false, 6, 13, 1, 9.91, 2.31, 4.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 8, 'AXM480', 27.59, 7.59, 27.22, false, 31, 13, 6, 14.49, 4.19, 12.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 8, 'AXM480', 26.25, 9.92, 25.78, false, 84, 20, 14, 16.51, 5.65, 9.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 8, 'AXM480', 24.42, 1.02, 21.98, false, 103, 20, 4, 14.44, 8.47, 10.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 8, 'AXM480', 31.99, 0.52, 22.46, false, 106, 20, 6, 14.73, 9.14, 10.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 8, 'AXM480', 27.66, 8.78, 27.40, false, 105, 13, 22, 26.35, 12.79, 23.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 8, 'AXM480', 24.40, 9.80, 25.03, false, 140, 12, 14, 26.73, 16.53, 22.82, ''); diff --git a/Chapter13/ABQ_Data_Entry/sql/create_db.sql b/Chapter13/ABQ_Data_Entry/sql/create_db.sql deleted file mode 100644 index 011389a..0000000 --- a/Chapter13/ABQ_Data_Entry/sql/create_db.sql +++ /dev/null @@ -1,82 +0,0 @@ --- Lab techs --- Use employee ID # as primary key --- Since names can change --- Names must be unique since they will be displayed --- In a dropdown -CREATE TABLE lab_techs ( - id SMALLINT PRIMARY KEY, - name VARCHAR(512) UNIQUE NOT NULL - ); - -CREATE TABLE labs ( - id CHAR(1) PRIMARY KEY - ); - -CREATE TABLE plots ( - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - current_seed_sample CHAR(6), - PRIMARY KEY(lab_id, plot), - CONSTRAINT valid_plot CHECK (plot BETWEEN 1 AND 20) - ); - -CREATE TABLE lab_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - lab_tech_id SMALLINT NOT NULL REFERENCES lab_techs(id), - PRIMARY KEY(date, time, lab_id) - ); - -CREATE TABLE plot_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - seed_sample CHAR(6) NOT NULL, - humidity NUMERIC(4, 2) CHECK (humidity BETWEEN 0.5 AND 52.0), - light NUMERIC(5, 2) CHECK (light BETWEEN 0 AND 100), - temperature NUMERIC(4, 2) CHECK (temperature BETWEEN 4 AND 40), - equipment_fault BOOLEAN NOT NULL, - blossoms SMALLINT NOT NULL CHECK (blossoms BETWEEN 0 AND 1000), - plants SMALLINT NOT NULL CHECK (plants BETWEEN 0 AND 20), - fruit SMALLINT NOT NULL CHECK (fruit BETWEEN 0 AND 1000), - max_height NUMERIC(6, 2) NOT NULL CHECK (max_height BETWEEN 0 AND 1000), - min_height NUMERIC(6, 2) NOT NULL CHECK (min_height BETWEEN 0 AND 1000), - median_height NUMERIC(6, 2) - NOT NULL CHECK - (median_height BETWEEN min_height AND max_height), - notes TEXT, - PRIMARY KEY(date, time, lab_id, plot), - FOREIGN KEY(lab_id, date, time) - REFERENCES lab_checks(lab_id, date, time), - FOREIGN KEY(lab_id, plot) REFERENCES plots(lab_id, plot) - ); - -DROP VIEW IF EXISTS data_record_view; -CREATE VIEW data_record_view AS ( - SELECT pc.date AS "Date", - to_char(pc.time, 'FMHH24:MI') AS "Time", - lt.name AS "Technician", - pc.lab_id AS "Lab", - pc.plot AS "Plot", - pc.seed_sample AS "Seed Sample", - pc.equipment_fault AS "Equipment Fault", - pc.humidity AS "Humidity", - pc.light AS "Light", - pc.temperature AS "Temperature", - pc.plants AS "Plants", - pc.blossoms AS "Blossoms", - pc.fruit AS "Fruit", - pc.max_height AS "Max Height", - pc.min_height AS "Min Height", - pc.median_height AS "Med Height", - pc.notes AS "Notes" - FROM plot_checks AS pc - JOIN lab_checks AS lc - ON pc.lab_id = lc.lab_id - AND pc.date = lc.date - AND pc.time = lc.time - JOIN lab_techs AS lt - ON lc.lab_tech_id = lt.id - ); diff --git a/Chapter13/ABQ_Data_Entry/sql/lookup_populate.sql b/Chapter13/ABQ_Data_Entry/sql/lookup_populate.sql deleted file mode 100644 index c95e763..0000000 --- a/Chapter13/ABQ_Data_Entry/sql/lookup_populate.sql +++ /dev/null @@ -1,20 +0,0 @@ -INSERT INTO lab_techs VALUES - (4291, 'J Simms'), - (4319, 'P Taylor'), - (4478, 'Q Murphy'), - (5607, 'L Taniff') - ; - -INSERT INTO labs VALUES - ('A'), ('B'), ('C'); - -INSERT INTO plots (SELECT labs.id, plotnums.plot -FROM labs, (SELECT generate_series(1, 20) plot) AS plotnums); - -UPDATE plots SET current_seed_sample= - (CASE WHEN plot % 4 = 1 THEN 'AXM477' - WHEN plot % 4 = 2 THEN 'AXM478' - WHEN plot % 4 = 3 THEN 'AXM479' - WHEN plot % 4 = 0 THEN 'AXM480' - ELSE '' END) -; diff --git a/Chapter13/requests_example.py b/Chapter13/requests_example.py deleted file mode 100644 index 407c09d..0000000 --- a/Chapter13/requests_example.py +++ /dev/null @@ -1,41 +0,0 @@ -import requests - -# Make a simple GET request - -response = requests.request('GET', 'http://www.alandmoore.com/') -print(response) - -response = requests.get('http://www.alandmoore.com/') -print(response) - -# Make a POST with data -response = requests.post( - 'http://duckduckgo.com/', - data={'q': 'tkinter', 'ko': '-2', 'kz': '-1'}) - -print(response) - - -# Sessions - -s = requests.session() - -# Assume this is a valid authentication service that returns an auth token -s.post('http://example.com/login', data={'u': 'test', 'p': 'test'}) -# Now we would have an auth token -response = s.get( - 'http://example.com/protected_content' -) -# Our token cookie would be listed here -print(s.cookies.items()) - - -# Response objects - -r = requests.get('http://www.alandmoore.com/') -print(r.headers) - -r = requests.get('http://www.example.com/does-not-exist') -r.status_code - -r.raise_for_status() diff --git a/Chapter13/sample_rest_service/README.txt b/Chapter13/sample_rest_service/README.txt deleted file mode 100644 index 232ff05..0000000 --- a/Chapter13/sample_rest_service/README.txt +++ /dev/null @@ -1,9 +0,0 @@ -This sample REST service script requires the Flask library, which can be installed using pip: - -$ pip install --user flask - -To run it, execute this in a terminal: - -$ python sample_rest_service.py - -Note that it will only be available on the local system; you cannot connect to it from another host. diff --git a/Chapter13/sample_rest_service/sample_rest_service.py b/Chapter13/sample_rest_service/sample_rest_service.py deleted file mode 100644 index d2a1d02..0000000 --- a/Chapter13/sample_rest_service/sample_rest_service.py +++ /dev/null @@ -1,89 +0,0 @@ -"""Test REST server - - -This is a simple test REST service implemented in flask -for ABQ Data Entry. It provides 3 endpoints: - -- /auth for authenticating -- /upload for uploading a file -- /files for downloading a file - -/files can respond to HEAD requests to simply check the file's -existence and size. -""" - -import sys -from pathlib import Path - -try: - import flask as f -except ImportError: - print( - 'This script requires the Flask library. ' - 'You can install this using the command: pip3 install --user flask' - ) - sys.exit() - -app = f.Flask(__name__) -app.secret_key = '12345' - -##################### -# Wrapper functions # -##################### - -def make_error(status_code, message): - """Create error response with JSON body""" - response = f.jsonify({ - 'status': status_code, - 'message': message - }) - response.status_code = status_code - return response - -############# -# Endpoints # -############# - -@app.route('/auth', methods=['POST']) -def auth(): - """Authenticate the user and set a session cookie""" - username = f.request.form.get('username') - password = f.request.form.get('password') - if username == 'test' and password == 'test': - f.session['authenticated'] = True - return f.jsonify({'message': 'Success'}) - return make_error(401, 'The provided credentials were not accepted.') - -@app.route('/files', methods=['PUT']) -def upload(): - """Endpoint for file upload""" - if not f.session.get('authenticated'): - return make_error(403, 'Access is forbidden') - filedata = f.request.files.get('file') - print(f'Uploaded {filedata.filename}') - filedata.save(filedata.filename) - - return f.jsonify({'message': 'Success'}) - -@app.route('/files/', methods=['GET', 'HEAD']) -def files(filename): - """Endpoint for file download""" - if not f.session.get('authenticated'): - return make_error(403, 'Access is forbidden') - fp = Path(filename) - if not fp.exists(): - return make_error(404, 'File not found') - response = f.Response() - response.headers.add('content-length', fp.stat().st_size) - if f.request.method == 'HEAD': - return response - response.set_data(fp.read_text()) - return response - - -################## -# Execute script # -################## - -if __name__ == '__main__': - app.run(port=8000) diff --git a/Chapter13/urllib_examples.py b/Chapter13/urllib_examples.py deleted file mode 100644 index c44608f..0000000 --- a/Chapter13/urllib_examples.py +++ /dev/null @@ -1,21 +0,0 @@ -from urllib.request import urlopen - -# Basic GET request and response examination -response = urlopen('http://python.org/') -print(response.getheader('Content-Type')) -print(response.getheader('Server')) -print(response.status) -print(response.reason) - -html = response.read() -print(html[:15]) -print(html.decode('utf-8')[:15]) - -# Basic POST request with data -response = urlopen('http://duckduckgo.com/', data=b'q=tkinter') - -from urllib.parse import urlencode -data = {'q': 'tkinter, python', 'ko': '-2', 'kz': '-1'} -print(urlencode(data)) - -response = urlopen('http://duckduckgo.com/', data=urlencode(data).encode()) diff --git a/Chapter14/ABQ_Data_Entry/.gitignore b/Chapter14/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter14/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter14/ABQ_Data_Entry/README.rst b/Chapter14/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter14/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry.py b/Chapter14/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index 23c7b66..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,487 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog -from tkinter import font -import platform -from queue import Queue - -from . import views as v -from . import models as m -from .mainmenu import get_main_menu_for_os -from . import images -from . import network as n - - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # move here for ch12 because we need some settings data to authenticate - self.settings_model = m.SettingsModel() - self._load_settings() - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - # chapter14: use after() here to eliminate the small window - # that flashes up breifly - self.after(250, self.deiconify) - - # Create model - # remove for ch12 - # self.model = m.CSVModel() - - self.inserted_rows = [] - self.updated_rows = [] - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Set taskbar icon - self.taskbar_icon = tk.PhotoImage(file=images.ABQ_LOGO_64) - self.call('wm', 'iconphoto', self._w, self.taskbar_icon) - - # Create the menu - #menu = MainMenu(self, self.settings) - menu_class = get_main_menu_for_os(platform.system()) - menu = menu_class(self, self.settings) - - self.config(menu=menu) - event_callbacks = { - '<>': lambda _: self.quit(), - '<>': self._show_recordlist, - '<>': self._new_record, - '<>': self._update_weather_data, - '<>': self._upload_to_corporate_rest, - '<>': self._upload_to_corporate_sftp, - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - # new for ch9 - self.logo = tk.PhotoImage(file=images.ABQ_LOGO_32) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16), - image=self.logo, - compound=tk.LEFT - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform_icon = tk.PhotoImage(file=images.FORM_ICON) - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.notebook.add( - self.recordform, text='Entry Form', - image=self.recordform_icon, compound=tk.LEFT - ) - self.recordform.bind('<>', self._on_save) - - - # The data record list - self.recordlist_icon = tk.PhotoImage(file=images.LIST_ICON) - self.recordlist = v.RecordList(self) - - self.notebook.insert( - 0, self.recordlist, text='Records', - image=self.recordlist_icon, compound=tk.LEFT - ) - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rowkey = self.recordform.current_record - self.model.save_record(data, rowkey) - if rowkey is not None: - self.updated_rows.append(rowkey) - else: - rowkey = (data['Date'], data['Time'], data['Lab'], data['Plot']) - self.inserted_rows.append(rowkey) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - -# Remove for ch12 -# def _on_file_select(self, *_): -# """Handle the file->select action""" -# -# filename = filedialog.asksaveasfilename( -# title='Select the target file for saving records', -# defaultextension='.csv', -# filetypes=[('CSV', '*.csv *.CSV')] -# ) -# if filename: -# self.model = m.CSVModel(filename=filename) -# self.inserted_rows.clear() -# self.updated_rows.clear() -# self._populate_recordlist() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - # new ch12 - def _database_login(self, username, password): - """Try to login to the database and create self.model""" - db_host = self.settings['db_host'].get() - db_name = self.settings['db_name'].get() - try: - self.model = m.SQLModel( - db_host, db_name, username, password) - except m.pg.OperationalError as e: - print(e) - return False - return True - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._database_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - # update font settings after loading them - self._set_font() - self.settings['font size'].trace_add('write', self._set_font) - self.settings['font family'].trace_add('write', self._set_font) - - # process theme - style = ttk.Style() - theme = self.settings.get('theme').get() - if theme in style.theme_names(): - style.theme_use(theme) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None, None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the Record selected recordlist id in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - return - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) - - # new chapter 9 - def _set_font(self, *_): - """Set the application's font""" - font_size = self.settings['font size'].get() - font_family = self.settings['font family'].get() - font_names = ('TkDefaultFont', 'TkMenuFont', 'TkTextFont') - for font_name in font_names: - tk_font = font.nametofont(font_name) - tk_font.config(size=font_size, family=font_family) - - # new chapter 13 - def _update_weather_data(self, *_): - """Initiate retrieval and storage of weather data""" - weather_data_model = m.WeatherDataModel( - self.settings['weather_station'].get() - ) - try: - weather_data = weather_data_model.get_weather_data() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem retrieving weather data', - detail=str(e) - ) - self.status.set('Problem retrieving weather data') - else: - self.model.add_weather_data(weather_data) - time = weather_data['observation_time_rfc822'] - self.status.set(f"Weather data recorded for {time}") - - def _create_csv_extract(self): - csvmodel = m.CSVModel() - records = self.model.get_all_records() - if not records: - raise Exception('No records were found to build a CSV file.') - for record in records: - csvmodel.save_record(record) - return csvmodel.file - - - def _upload_to_corporate_sftp(self, *_): - - # create csv file - try: - csvfile = self._create_csv_extract() - except Exception as e: - messagebox.showwarning( - title='Error', message=str(e) - ) - return - - # authenticate - d = v.LoginDialog(self, 'Login to ABQ Corporate SFTP') - if d.result is None: - return - username, password = d.result - - # create model - host = self.settings['abq_sftp_host'].get() - port = self.settings['abq_sftp_port'].get() - sftp_model = m.SFTPModel(host, port) - try: - sftp_model.authenticate(username, password) - except Exception as e: - messagebox.showerror('Error Authenticating', str(e)) - return - - # check destination file - destination_dir = self.settings['abq_sftp_path'].get() - destination_path = f'{destination_dir}/{csvfile.name}' - - try: - exists = sftp_model.check_file(destination_path) - except Exception as e: - messagebox.showerror( - f'Error checking file {destination_path}', - str(e) - ) - return - if exists: - # ask if we should overwrite - overwrite = messagebox.askyesno( - 'File exists', - f'The file {destination_path} already exists on the server, ' - 'do you want to overwrite it?' - ) - if not overwrite: - # ask if we should download it - download = messagebox.askyesno( - 'Download file', - 'Do you want to download the file to inspect it?' - ) - if download: - # get a destination filename and save - filename = filedialog.asksaveasfilename() - if not filename: - return - try: - sftp_model.get_file(destination_path, filename) - except Exception as e: - messagebox.showerror('Error downloading', str(e)) - return - messagebox.showinfo( - 'Download Complete', 'Download Complete.' - ) - return - # if we haven't returned, the user wants to upload - try: - sftp_model.upload_file(csvfile, destination_path) - except Exception as e: - messagebox.showerror('Error uploading', str(e)) - else: - messagebox.showinfo( - 'Success', - f'{csvfile} successfully uploaded to SFTP server.' - ) - - def _upload_to_corporate_rest(self, *_): - - # create csv file - try: - csvfile = self._create_csv_extract() - except Exception as e: - messagebox.showwarning( - title='Error', message=str(e) - ) - return - - # Authenticate to the rest server - d = v.LoginDialog( - self, 'Login to ABQ Corporate REST API' - ) - if d.result is not None: - username, password = d.result - else: - return - - # create REST model - rest_model = m.CorporateRestModel( - self.settings['abq_rest_url'].get() - ) - try: - rest_model.authenticate(username, password) - except Exception as e: - messagebox.showerror('Error authenticating', str(e)) - return - - # Check if the file exists - try: - exists = rest_model.check_file(csvfile.name) - except Exception as e: - messagebox.showerror('Error checking for file', str(e)) - return - - if exists: - # ask if we should overwrite - overwrite = messagebox.askyesno( - 'File exists', - f'The file {csvfile.name} already exists on the server, ' - 'do you want to overwrite it?' - ) - if not overwrite: - # ask if we should download it - download = messagebox.askyesno( - 'Download file', - 'Do you want to download the file to inspect it?' - ) - if download: - # get a destination filename and save - filename = filedialog.asksaveasfilename() - if not filename: - return - try: - data = rest_model.get_file(csvfile.name) - except Exception as e: - messagebox.showerror('Error downloading', str(e)) - return - with open(filename, 'w', encoding='utf-8') as fh: - fh.write(data) - messagebox.showinfo( - 'Download Complete', 'Download Complete.' - ) - return - # if we haven't returned, the user wants to upload - rest_model.upload_file(csvfile) - self._check_queue(rest_model.queue) - - - def _check_queue(self, queue): - while not queue.empty(): - item = queue.get() - if item.status == 'done': - messagebox.showinfo( - item.status, - message=item.subject, - detail=item.body - ) - self.status.set(item.subject) - return - elif item.status == 'error': - messagebox.showerror( - item.status, - message=item.subject, - detail=item.body - ) - self.status.set(item.subject) - return - else: - self.status.set(f'{item.subject}: {item.body}') - self.after(100, self._check_queue, queue) diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/__init__.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/__init__.py deleted file mode 100644 index 57538d9..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from pathlib import Path - -# This gives us the parent directory of this file (__init__.py) -IMAGE_DIRECTORY = Path(__file__).parent - -ABQ_LOGO_16 = IMAGE_DIRECTORY / 'abq_logo-16x10.png' -ABQ_LOGO_32 = IMAGE_DIRECTORY / 'abq_logo-32x20.png' -ABQ_LOGO_64 = IMAGE_DIRECTORY / 'abq_logo-64x40.png' - -# PNG icons - -SAVE_ICON = IMAGE_DIRECTORY / 'file-2x.png' -RESET_ICON = IMAGE_DIRECTORY / 'reload-2x.png' -LIST_ICON = IMAGE_DIRECTORY / 'list-2x.png' -FORM_ICON = IMAGE_DIRECTORY / 'browser-2x.png' - - -# BMP icons -QUIT_BMP = IMAGE_DIRECTORY / 'x-2x.xbm' -ABOUT_BMP = IMAGE_DIRECTORY / 'question-mark-2x.xbm' diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png deleted file mode 100644 index 255f273..0000000 Binary files a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png and /dev/null differ diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png deleted file mode 100644 index 650add1..0000000 Binary files a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png and /dev/null differ diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png deleted file mode 100644 index be9458f..0000000 Binary files a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png and /dev/null differ diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png deleted file mode 100644 index 2a6efb0..0000000 Binary files a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png and /dev/null differ diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/file-2x.png b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/file-2x.png deleted file mode 100644 index 4196c44..0000000 Binary files a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/file-2x.png and /dev/null differ diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/list-2x.png b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/list-2x.png deleted file mode 100644 index 1fc4450..0000000 Binary files a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/list-2x.png and /dev/null differ diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm deleted file mode 100644 index 8981c9b..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define question_mark_2x_width 16 -#define question_mark_2x_height 16 -static unsigned char question_mark_2x_bits[] = { - 0xc0, 0x0f, 0xe0, 0x1f, 0x70, 0x38, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x18, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03 }; diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png deleted file mode 100644 index 2a79f16..0000000 Binary files a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png and /dev/null differ diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm b/Chapter14/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm deleted file mode 100644 index 940af96..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define x_2x_width 16 -#define x_2x_height 16 -static unsigned char x_2x_bits[] = { - 0x04, 0x10, 0x0e, 0x38, 0x1f, 0x7c, 0x3e, 0x7e, 0x7c, 0x3f, 0xf8, 0x1f, - 0xf0, 0x0f, 0xe0, 0x07, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0x7e, 0x3e, - 0x3f, 0x7c, 0x1e, 0x78, 0x0c, 0x30, 0x00, 0x00 }; diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index 116277d..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,401 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import font - -from . import images - -class GenericMainMenu(tk.Menu): - """The Application's main menu""" - - accelerators = { - 'file_open': 'Ctrl+O', - 'quit': 'Ctrl+Q', - 'record_list': 'Ctrl+L', - 'new_record': 'Ctrl+R', - } - - keybinds = { - '': '<>', - '': '<>', - '': '<>', - '': '<>' - } - - styles = {} - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def _create_icons(self): - - # must be done in a method because PhotoImage can't be created - # until there is a Tk instance. - # There isn't one when the class is defined, but there is when - # the instance is created. - self.icons = { - # 'file_open': tk.PhotoImage(file=images.SAVE_ICON), - 'record_list': tk.PhotoImage(file=images.LIST_ICON), - 'new_record': tk.PhotoImage(file=images.FORM_ICON), - 'quit': tk.BitmapImage(file=images.QUIT_BMP, foreground='red'), - 'about': tk.BitmapImage( - file=images.ABOUT_BMP, foreground='#CC0', background='#A09' - ), - } - - def _add_file_open(self, menu): - - menu.add_command( - label='Select file…', command=self._event('<>'), - image=self.icons.get('file'), compound=tk.LEFT - ) - - def _add_quit(self, menu): - menu.add_command( - label='Quit', command=self._event('<>'), - image=self.icons.get('quit'), compound=tk.LEFT - ) - - def _add_weather_download(self, menu): - menu.add_command( - label="Update Weather Data", - command=self._event('<>'), - ) - - def _add_rest_upload(self, menu): - menu.add_command( - label="Upload CSV to corporate REST", - command=self._event('<>'), - ) - - def _add_sftp_upload(self, menu): - menu.add_command( - label="Upload CSV to corporate SFTP", - command=self._event('<>'), - ) - - def _add_autofill_date(self, menu): - menu.add_checkbutton( - label='Autofill Date', variable=self.settings['autofill date'] - ) - - def _add_autofill_sheet(self, menu): - menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - def _add_font_size_menu(self, menu): - font_size_menu = tk.Menu(self, tearoff=False, **self.styles) - for size in range(6, 17, 1): - font_size_menu.add_radiobutton( - label=size, value=size, - variable=self.settings['font size'] - ) - menu.add_cascade(label='Font size', menu=font_size_menu) - - def _add_font_family_menu(self, menu): - font_family_menu = tk.Menu(self, tearoff=False, **self.styles) - for family in font.families(): - font_family_menu.add_radiobutton( - label=family, value=family, - variable=self.settings['font family'] - ) - menu.add_cascade(label='Font family', menu=font_family_menu) - - def _add_themes_menu(self, menu): - style = ttk.Style() - themes_menu = tk.Menu(self, tearoff=False, **self.styles) - for theme in style.theme_names(): - themes_menu.add_radiobutton( - label=theme, value=theme, - variable=self.settings['theme'] - ) - menu.add_cascade(label='Theme', menu=themes_menu) - self.settings['theme'].trace_add('write', self._on_theme_change) - - def _add_go_record_list(self, menu): - menu.add_command( - label="Record List", command=self._event('<>'), - image=self.icons.get('record_list'), compound=tk.LEFT - ) - - def _add_go_new_record(self, menu): - menu.add_command( - label="New Record", command=self._event('<>'), - image=self.icons.get('new_record'), compound=tk.LEFT - ) - - def _add_about(self, menu): - menu.add_command( - label='About…', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - # The file menu - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) - #self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - - # The options menu - self._menus['Options'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Options']) - self._add_autofill_sheet(self._menus['Options']) - self._add_font_size_menu(self._menus['Options']) - self._add_font_family_menu(self._menus['Options']) - self._add_themes_menu(self._menus['Options']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self.add_cascade(label='Help', menu=self._menus['Help']) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - self.configure(**self.styles) - - def __init__(self, parent, settings, **kwargs): - super().__init__(parent, **kwargs) - self.settings = settings - self._create_icons() - self._menus = dict() - self._build_menu() - self._bind_accelerators() - self.configure(**self.styles) - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo( - title='About', message=about_message, detail=about_detail - ) - @staticmethod - def _on_theme_change(*_): - """Popup a message about theme changes""" - message = "Change requires restart" - detail = ( - "Theme changes do not take effect" - " until application restart" - ) - messagebox.showwarning( - title='Warning', - message=message, - detail=detail - ) - - def _bind_accelerators(self): - - for key, sequence in self.keybinds.items(): - self.bind_all(key, self._event(sequence)) - -class WindowsMainMenu(GenericMainMenu): - """ - Changes: - - Windows uses file->exit instead of file->quit, - and no accelerator is used. - - Windows can handle commands on the menubar, so - put 'Record List' / 'New Record' on the bar - - Windows can't handle icons on the menu bar, though - - Put 'options' under 'Tools' with separator - """ - - def _create_icons(self): - super()._create_icons() - del(self.icons['new_record']) - del(self.icons['record_list']) - - def __init__(self, *args, **kwargs): - del(self.keybinds['']) - super().__init__(*args, **kwargs) - - def _add_quit(self, menu): - menu.add_command( - label='Exit', - command=self._event('<>'), - image=self.icons.get('quit'), - compound=tk.LEFT - ) - - def _build_menu(self): - # File Menu - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Tools']) - self._add_autofill_sheet(self._menus['Tools']) - self._add_font_size_menu(self._menus['Tools']) - self._add_font_family_menu(self._menus['Tools']) - self._add_themes_menu(self._menus['Tools']) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False) - self._add_about(self._menus['Help']) - - # Build main menu - self.add_cascade(label='File', menu=self._menus['File']) - self.add_cascade(label='Tools', menu=self._menus['Tools']) - self._add_go_record_list(self) - self._add_go_new_record(self) - self.add_cascade(label='Help', menu=self._menus['Help']) - - -class LinuxMainMenu(GenericMainMenu): - """Differences for Linux: - - - Edit menu for autofill options - - View menu for font & theme options - - Use color theme for menu - """ - styles = { - 'background': '#333', - 'foreground': 'white', - 'activebackground': '#777', - 'activeforeground': 'white', - 'relief': tk.GROOVE - } - - - def _build_menu(self): - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The edit menu - self._menus['Edit'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - - # The View menu - self._menus['View'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -class MacOsMainMenu(GenericMainMenu): - """ - Differences for MacOS: - - - Create App Menu - - Move about to app menu, remove 'help' - - Remove redundant quit command - - Change accelerators to Command-[] - - Add View menu for font & theme options - - Add Edit menu for autofill options - - Add Window menu for navigation commands - """ - keybinds = { - '': '<>', - '': '<>', - '': '<>' - } - accelerators = { - 'file_open': 'Cmd-O', - 'record_list': 'Cmd-L', - 'new_record': 'Cmd-R', - } - - def _add_about(self, menu): - menu.add_command( - label='About ABQ Data Entry', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - self._menus['ABQ Data Entry'] = tk.Menu( - self, tearoff=False, - name='apple' - ) - self._add_about(self._menus['ABQ Data Entry']) - self._menus['ABQ Data Entry'].add_separator() - - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - - self._menus['Edit'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - - # View menu - self._menus['View'] = tk.Menu(self, tearoff=False) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # Window Menu - self._menus['Window'] = tk.Menu(self, name='window', tearoff=False) - self._add_go_record_list(self._menus['Window']) - self._add_go_new_record(self._menus['Window']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -def get_main_menu_for_os(os_name): - """Return the menu class appropriate to the given OS""" - menus = { - 'Linux': LinuxMainMenu, - 'Darwin': MacOsMainMenu, - 'freebsd7': LinuxMainMenu, - 'Windows': WindowsMainMenu - } - - return menus.get(os_name, GenericMainMenu) diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index bc30d03..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,558 +0,0 @@ -import csv -from pathlib import Path -import os -import json -import platform -from datetime import datetime -from urllib.request import urlopen -from xml.etree import ElementTree -import requests -import paramiko -from threading import Thread, Lock -from queue import Queue -from collections import namedtuple - -import psycopg2 as pg -from psycopg2.extras import DictCursor - -from .constants import FieldTypes as FT - -Message = namedtuple('Message', ['status', 'subject', 'body']) - -class SQLModel: - """Data Model for SQL data storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string_list, - 'values': []}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': []}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': []}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - lc_update_query = ( - 'UPDATE lab_checks SET lab_tech_id = ' - '(SELECT id FROM lab_techs WHERE name = %(Technician)s) ' - 'WHERE date=%(Date)s AND time=%(Time)s AND lab_id=%(Lab)s' - ) - - lc_insert_query = ( - 'INSERT INTO lab_checks VALUES (%(Date)s, %(Time)s, %(Lab)s, ' - '(SELECT id FROM lab_techs WHERE name LIKE %(Technician)s))' - ) - - pc_update_query = ( - 'UPDATE plot_checks SET date=%(Date)s, time=%(Time)s, ' - 'lab_id=%(Lab)s, plot=%(Plot)s, seed_sample = %(Seed Sample)s, ' - 'humidity = %(Humidity)s, light = %(Light)s, ' - 'temperature = %(Temperature)s, ' - 'equipment_fault = %(Equipment Fault)s, ' - 'blossoms = %(Blossoms)s, plants = %(Plants)s, ' - 'fruit = %(Fruit)s, max_height = %(Max Height)s, ' - 'min_height = %(Min Height)s, median_height = %(Med Height)s, ' - 'notes = %(Notes)s WHERE date=%(key_date)s AND time=%(key_time)s ' - 'AND lab_id=%(key_lab)s AND plot=%(key_plot)s') - - pc_insert_query = ( - 'INSERT INTO plot_checks VALUES (%(Date)s, %(Time)s, %(Lab)s,' - ' %(Plot)s, %(Seed Sample)s, %(Humidity)s, %(Light)s,' - ' %(Temperature)s, %(Equipment Fault)s, %(Blossoms)s, %(Plants)s,' - ' %(Fruit)s, %(Max Height)s, %(Min Height)s,' - ' %(Med Height)s, %(Notes)s)') - - def __init__(self, host, database, user, password): - self.connection = pg.connect(host=host, database=database, - user=user, password=password, cursor_factory=DictCursor) - - techs = self.query("SELECT name FROM lab_techs ORDER BY name") - labs = self.query("SELECT id FROM labs ORDER BY id") - plots = self.query("SELECT DISTINCT plot FROM plots ORDER BY plot") - self.fields['Technician']['values'] = [x['name'] for x in techs] - self.fields['Lab']['values'] = [x['id'] for x in labs] - self.fields['Plot']['values'] = [str(x['plot']) for x in plots] - - def query(self, query, parameters=None): - with self.connection: - with self.connection.cursor() as cursor: - cursor.execute(query, parameters) - # cursor.description is None when - # no rows are returned - if cursor.description is not None: - return cursor.fetchall() - - def get_all_records(self, all_dates=False): - """Return all records. - - By default, only return today's records, unless - all_dates is True. - """ - query = ('SELECT * FROM data_record_view ' - 'WHERE %(all_dates)s OR "Date" = CURRENT_DATE ' - 'ORDER BY "Date" DESC, "Time", "Lab", "Plot"') - return self.query(query, {'all_dates': all_dates}) - - def get_record(self, rowkey): - """Return a single record - - rowkey must be a tuple of date, time, lab, and plot - """ - date, time, lab, plot = rowkey - query = ( - 'SELECT * FROM data_record_view ' - 'WHERE "Date" = %(date)s AND "Time" = %(time)s ' - 'AND "Lab" = %(lab)s AND "Plot" = %(plot)s') - result = self.query( - query, - {"date": date, "time": time, "lab": lab, "plot": plot} - ) - return result[0] if result else dict() - - def save_record(self, record, rowkey): - """Save a record to the database - - rowkey must be a tuple of date, time, lab, and plot. - Or None if this is a new record. - """ - if rowkey: - key_date, key_time, key_lab, key_plot = rowkey - record.update({ - "key_date": key_date, - "key_time": key_time, - "key_lab": key_lab, - "key_plot": key_plot - }) - - # Lab check is based on the entered date/time/lab - if self.get_lab_check( - record['Date'], record['Time'], record['Lab'] - ): - lc_query = self.lc_update_query - else: - lc_query = self.lc_insert_query - # Plot check is based on the key values - if rowkey: - pc_query = self.pc_update_query - else: - pc_query = self.pc_insert_query - - self.query(lc_query, record) - self.query(pc_query, record) - - def get_lab_check(self, date, time, lab): - """Retrieve the lab check record for the given date, time, and lab""" - query = ('SELECT date, time, lab_id, lab_tech_id, ' - 'lt.name as lab_tech FROM lab_checks JOIN lab_techs lt ' - 'ON lab_checks.lab_tech_id = lt.id WHERE ' - 'lab_id = %(lab)s AND date = %(date)s AND time = %(time)s') - results = self.query( - query, {'date': date, 'time': time, 'lab': lab}) - return results[0] if results else dict() - - def get_current_seed_sample(self, lab, plot): - """Get the seed sample currently planted in the given lab and plot""" - result = self.query('SELECT current_seed_sample FROM plots ' - 'WHERE lab_id=%(lab)s AND plot=%(plot)s', - {'lab': lab, 'plot': plot}) - return result[0]['current_seed_sample'] if result else '' - - def add_weather_data(self, data): - query = ( - 'INSERT INTO local_weather VALUES ' - '(%(observation_time_rfc822)s, %(temp_c)s, ' - '%(relative_humidity)s, %(pressure_mb)s, ' - '%(weather)s)' - ) - try: - self.query(query, data) - except pg.IntegrityError: - # already have weather for this datetime - pass - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data, rownum=None): - """Save a dict of data to the CSV file""" - - if rownum is None: - # This is a new record - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - else: - # This is an update - records = self.get_all_records() - records[rownum] = data - with open(self.file, 'w', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - csvwriter.writeheader() - csvwriter.writerows(records) - - def get_all_records(self): - """Read in all records from the CSV and return a list""" - if not self.file.exists(): - return [] - - with open(self.file, 'r', encoding='utf-8') as fh: - # Casting to list is necessary for unit tests to work - csvreader = csv.DictReader(fh) - missing_fields = set(self.fields.keys()) - set(csvreader.fieldnames) - if len(missing_fields) > 0: - fields_string = ', '.join(missing_fields) - raise Exception( - f"File is missing fields: {fields_string}" - ) - records = list(csvreader) - - # Correct issue with boolean fields - trues = ('true', 'yes', '1') - bool_fields = [ - key for key, meta - in self.fields.items() - if meta['type'] == FT.boolean - ] - for record in records: - for key in bool_fields: - record[key] = record[key].lower() in trues - return records - - def get_record(self, rownum): - """Get a single record by row number - - Callling code should catch IndexError - in case of a bad rownum. - """ - - return self.get_all_records()[rownum] - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'}, - 'db_host': {'type': 'str', 'value': 'localhost'}, - 'db_name': {'type': 'str', 'value': 'abq'}, - 'weather_station': {'type': 'str', 'value': 'KBMG'}, - 'abq_rest_url': { - 'type': 'str', - 'value': 'http://localhost:8000/' - }, - 'abq_sftp_host': {'type': 'str', 'value': 'localhost'}, - 'abq_sftp_port': {'type': 'int', 'value': 22}, - 'abq_sftp_path': {'type': 'str', 'value': 'ABQ/BLTN_IN'} - } - - config_dirs = { - "Linux": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - "freebsd7": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - 'Darwin': Path.home() / 'Library' / 'Application Support', - 'Windows': Path.home() / 'AppData' / 'Local' - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - filedir = self.config_dirs.get(platform.system(), Path.home()) - self.filepath = filedir / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - json_string = json.dumps(self.fields) - with open(self.filepath, 'w', encoding='utf-8') as fh: - fh.write(json_string) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.loads(fh.read()) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value - -class WeatherDataModel: - - base_url = 'http://w1.weather.gov/xml/current_obs/%7B%7D.xml' - - def __init__(self, station): - self.url = self.base_url.format(station) - - - def get_weather_data(self): - response = urlopen(self.url) - - xmlroot = ElementTree.fromstring(response.read()) - weatherdata = { - 'observation_time_rfc822': None, - 'temp_c': None, - 'relative_humidity': None, - 'pressure_mb': None, - 'weather': None - } - - for tag in weatherdata: - element = xmlroot.find(tag) - if element is not None: - weatherdata[tag] = element.text - - return weatherdata - - - -class ThreadedUploader(Thread): - - upload_lock = Lock() - - def __init__(self, session_cookie, files_url, filepath, queue): - super().__init__() - self.files_url = files_url - self.filepath = filepath - self.session = requests.Session() - self.session.cookies['session'] = session_cookie - self.queue = queue - - - def run(self, *args, **kwargs): - self.queue.put( - Message( - 'info', 'Upload Started', - f'Begin upload of {self.filepath}' - ) - ) - - with self.upload_lock: - with open(self.filepath, 'rb') as fh: - files = {'file': fh} - response = self.session.put( - self.files_url, files=files - ) - try: - response.raise_for_status() - except Exception as e: - self.queue.put(Message('error', 'Upload Error', str(e))) - else: - self.queue.put( - Message( - 'done', - 'Upload Succeeded', - f'Upload of {self.filepath} to REST succeeded' - ) - ) - - -class CorporateRestModel: - - def __init__(self, base_url): - - self.auth_url = f'{base_url}/auth' - self.files_url = f'{base_url}/files' - self.session = requests.session() - self.queue = Queue() - - @staticmethod - def _raise_for_status(response): - try: - response.raise_for_status() - except requests.HTTPError: - raise Exception(response.json().get('message')) - - def authenticate(self, username, password): - """Authenticate to the server""" - response = self.session.post( - self.auth_url, - data={'username': username, 'password': password} - ) - self._raise_for_status(response) - - def check_file(self, filename): - """See if a file exists on the server""" - url = f"{self.files_url}/{filename}" - response = self.session.head(url) - if response.status_code == 200: - return True - elif response.status_code == 404: - return False - self._raise_for_status(response) - - def get_file(self, filename): - """Download a file from the server""" - url = f"{self.files_url}/{filename}" - response = self.session.get(url) - self._raise_for_status(response) - return response.text - - def upload_file(self, filepath): - """PUT a file on the server""" - cookie = self.session.cookies.get('session') - uploader = ThreadedUploader( - cookie, self.files_url, filepath, self.queue - ) - uploader.start() - -class SFTPModel: - - def __init__(self, host, port=22): - self.host = host - self.port = port - - # setup SSHClient - self._client = paramiko.SSHClient() - self._client.set_missing_host_key_policy( - paramiko.AutoAddPolicy() - ) - self._client.load_system_host_keys() - - - def authenticate(self, username, password): - try: - self._client.connect( - self.host, username=username, - password=password, port=self.port - ) - except paramiko.AuthenticationException: - raise Exception( - 'The username and password were not accepted by the server.' - ) - - def _check_auth(self): - transport = self._client.get_transport() - if not transport.is_active() and transport.is_authenticated(): - raise Exception('Not connected to a server.') - - - def check_file(self, remote_path): - """Check if the file at remote_path exists""" - self._check_auth() - sftp = self._client.open_sftp() - try: - sftp.stat(remote_path) - except FileNotFoundError: - return False - return True - - def upload_file(self, local_path, remote_path): - """Upload file at local_path to remote_path - - Both paths must include a filename - """ - self._check_auth() - sftp = self._client.open_sftp() - - # Create the dstination path if it doesn't exist - remote_path = Path(remote_path) - for directory in remote_path.parent.parts: - if directory not in sftp.listdir(): - sftp.mkdir(directory) - sftp.chdir(directory) - # copy the file - # just use filename because our CWD should - # be the full path without the name - sftp.put(local_path, remote_path.name) - - def get_file(self, remote_path, local_path): - self._check_auth() - sftp = self._client.open_sftp() - sftp.get(remote_path, local_path) diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/network.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/network.py deleted file mode 100644 index f80c268..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/network.py +++ /dev/null @@ -1,163 +0,0 @@ -from urllib.request import urlopen -from xml.etree import ElementTree -import requests -import ftplib as ftp -from os import path -from threading import Thread, Lock -from collections import namedtuple - -Message = namedtuple('Message', ['status', 'subject', 'body']) - - -def get_local_weather(station): - """Retrieve local weather data from the web - - Returns a dictionary containing: - - observation_time_rfc822: timestamp of observation in rfc822 format - - temp_c: The temperature in degrees C - - relative_humidity: Relative Humidity percentage - - pressure_mb: Air pressure in mb - - weather: A string describing weather conditions - """ - url = f'http://w1.weather.gov/xml/current_obs/%7Bstation%7D.xml' - response = urlopen(url) - - xmlroot = ElementTree.fromstring(response.read()) - weatherdata = { - 'observation_time_rfc822': None, - 'temp_c': None, - 'relative_humidity': None, - 'pressure_mb': None, - 'weather': None - } - - for tag in weatherdata: - element = xmlroot.find(tag) - if element is not None: - weatherdata[tag] = element.text - - return weatherdata - - -def upload_to_corporate_rest( - filepath, upload_url, auth_url, - username, password): - """Upload a file to the corporate server using REST""" - - session = requests.session() - - response = session.post( - auth_url, - data={'username': username, 'password': password} - ) - response.raise_for_status() - - files = {'file': open(filepath, 'rb')} - response = session.put( - upload_url, - files=files - ) - files['file'].close() - response.raise_for_status() - - -def upload_to_corporate_ftp( - filepath, ftp_host, - ftp_port, ftp_user, ftp_pass): - """Upload a file to the corporate server using FTP""" - - with ftp.FTP() as ftp_cx: - # connect and login - ftp_cx.connect(ftp_host, ftp_port) - ftp_cx.login(ftp_user, ftp_pass) - - # upload file - filename = path.basename(filepath) - - with open(filepath, 'rb') as fh: - ftp_cx.storbinary('STOR {}'.format(filename), fh) - -def get_corporate_ftp_files(ftp_host, ftp_port, ftp_user, ftp_pass): - """Get a list of the files on the FTP host""" - with ftp.FTP() as ftp_cx: - ftp_cx.connect(ftp_host, ftp_port) - ftp_cx.login(ftp_user, ftp_pass) - files = ftp_cx.nlst() - - return files - -class CorporateRestUploaderNoQueue(Thread): - - def __init__(self, filepath, upload_url, auth_url, - username, password): - self.filepath = filepath - self.upload_url = upload_url - self.auth_url = auth_url - self.username = username - self.password = password - super().__init__() - - def run(self, *args, **kwargs): - session = requests.session() - data = {'username': self.username, 'password': self.password} - response = session.post(self.auth_url, data=data) - response.raise_for_status() - files = {'file': open(self.filepath, 'rb')} - response = session.put( - self.upload_url, - files=files - ) - files['file'].close() - response.raise_for_status() - -class CorporateRestUploader(Thread): - - rest_upload_lock = Lock() - - def __init__( - self, filepath, upload_url, auth_url, - username, password, queue - ): - self.filepath = filepath - self.upload_url = upload_url - self.auth_url = auth_url - self.username = username - self.password = password - self.queue = queue - super().__init__() - - def _putmessage(self, status, subject, body): - self.queue.put(Message(status, subject, body)) - - def run(self, *args, **kwargs): - session = requests.session() - self._putmessage( - 'info', 'Authenticating', - f'Authenticating to {self.auth_url} as {self.username}' - ) - data = {'username': self.username, 'password': self.password} - try: - response = session.post(self.auth_url,data=data) - response.raise_for_status() - except Exception as e: - self._putmessage('error', 'Authentication Failure', str(e)) - return - self._putmessage( - 'info', 'Starting Upload', - f'Starting upload of {self.upload_url} to {self.filepath}' - ) - files = {'file': open(self.filepath, 'rb')} - try: - self.rest_upload_lock.acquire() - response = session.put(self.upload_url, files=files) - files['file'].close() - response.raise_for_status() - except Exception as e: - self._putmessage('error', "Upload Failure", str(e)) - return - finally: - self.rest_upload_lock.release() - self._putmessage( - 'done', 'Complete', - f'File {self.filepath} uploaded to ABQ REST' - ) diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/test/__init__.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/test/test_application.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/test/test_application.py deleted file mode 100644 index 73cc7b4..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/test/test_application.py +++ /dev/null @@ -1,72 +0,0 @@ -from unittest import TestCase -from unittest.mock import patch -from .. import application - - -class TestApplication(TestCase): - records = [ - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '1', 'Seed Sample': 'AX477', - 'Humidity': '24.09', 'Light': '1.03', 'Temperature': '22.01', - 'Equipment Fault': False, 'Plants': '9', 'Blossoms': '21', - 'Fruit': '3', 'Max Height': '8.7', 'Med Height': '2.73', - 'Min Height': '1.67', 'Notes': '\n\n', - }, - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '2', 'Seed Sample': 'AX478', - 'Humidity': '24.47', 'Light': '1.01', 'Temperature': '21.44', - 'Equipment Fault': False, 'Plants': '14', 'Blossoms': '27', - 'Fruit': '1', 'Max Height': '9.2', 'Med Height': '5.09', - 'Min Height': '2.35', 'Notes': '' - } - ] - - settings = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'} - } - - def setUp(self): - # can be parenthesized in python 3.10+ - with \ - patch('abq_data_entry.application.m.CSVModel') as csvmodel,\ - patch('abq_data_entry.application.m.SettingsModel') as settingsmodel,\ - patch('abq_data_entry.application.Application._show_login') as show_login,\ - patch('abq_data_entry.application.v.DataRecordForm'),\ - patch('abq_data_entry.application.v.RecordList'),\ - patch('abq_data_entry.application.ttk.Notebook'),\ - patch('abq_data_entry.application.get_main_menu_for_os')\ - : - - settingsmodel().fields = self.settings - csvmodel().get_all_records.return_value = self.records - show_login.return_value = True - self.app = application.Application() - - def tearDown(self): - self.app.update() - self.app.destroy() - - def test_show_recordlist(self): - self.app._show_recordlist() - self.app.update() - self.app.notebook.select.assert_called_with(self.app.recordlist) - - def test_populate_recordlist(self): - # test correct functions - self.app._populate_recordlist() - self.app.model.get_all_records.assert_called() - self.app.recordlist.populate.assert_called_with(self.records) - - # test exceptions - - self.app.model.get_all_records.side_effect = Exception('Test message') - with patch('abq_data_entry.application.messagebox'): - self.app._populate_recordlist() - application.messagebox.showerror.assert_called_with( - title='Error', message='Problem reading file', - detail='Test message' - ) diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/test/test_models.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/test/test_models.py deleted file mode 100644 index 0cb1baf..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/test/test_models.py +++ /dev/null @@ -1,137 +0,0 @@ -from .. import models -from unittest import TestCase -from unittest import mock - -from pathlib import Path - -class TestCSVModel(TestCase): - - def setUp(self): - - self.file1_open = mock.mock_open( - read_data=( - "Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light," - "Temperature,Equipment Fault,Plants,Blossoms,Fruit,Min Height," - "Max Height,Med Height,Notes\r\n" - "2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,14," - "27,1,2.35,9.2,5.09,\r\n" - "2021-06-01,8:00,J Simms,A,3,AX479,24.15,1,20.82,False,18,49," - "6,2.47,14.2,11.83,\r\n")) - self.file2_open = mock.mock_open(read_data='') - - self.model1 = models.CSVModel('file1') - self.model2 = models.CSVModel('file2') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_all_records(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - records = self.model1.get_all_records() - - self.assertEqual(len(records), 2) - self.assertIsInstance(records, list) - self.assertIsInstance(records[0], dict) - - fields = ( - 'Date', 'Time', 'Technician', 'Lab', 'Plot', - 'Seed Sample', 'Humidity', 'Light', - 'Temperature', 'Equipment Fault', 'Plants', - 'Blossoms', 'Fruit', 'Min Height', 'Max Height', - 'Med Height', 'Notes') - - for field in fields: - self.assertIn(field, records[0].keys()) - - # testing boolean conversion - self.assertFalse(records[0]['Equipment Fault']) - - self.file1_open.assert_called_with( - Path('file1'), 'r', encoding='utf-8' - ) - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_record(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - record0 = self.model1.get_record(0) - record1 = self.model1.get_record(1) - - self.assertNotEqual(record0, record1) - self.assertEqual(record0['Date'], '2021-06-01') - self.assertEqual(record1['Plot'], '3') - self.assertEqual(record0['Med Height'], '5.09') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_save_record(self, mock_path_exists): - - record = { - "Date": '2021-07-01', "Time": '12:00', - "Technician": 'Test Technician', "Lab": 'E', - "Plot": '17', "Seed Sample": 'test sample', - "Humidity": '10', "Light": '99', - "Temperature": '20', "Equipment Fault": False, - "Plants": '10', "Blossoms": '200', - "Fruit": '250', "Min Height": '40', - "Max Height": '50', "Med Height": '55', - "Notes": 'Test Note\r\nTest Note\r\n' - } - record_as_csv = ( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - - # test appending a file - mock_path_exists.return_value = True - - # test insert - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - self.file2_open.assert_called_with( - Path('file2'), 'a', encoding='utf-8' - ) - file2_handle = self.file2_open() - file2_handle.write.assert_called_with(record_as_csv) - - # test update - with mock.patch('abq_data_entry.models.open', self.file1_open): - self.model1.save_record(record, 1) - self.file1_open.assert_called_with( - Path('file1'), 'w', encoding='utf-8' - ) - file1_handle = self.file1_open() - file1_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call( - '2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,' - '14,27,1,2.35,9.2,5.09,\r\n'), - mock.call( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - ]) - - # test new file - mock_path_exists.return_value = False - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - file2_handle = self.file2_open() - file2_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call(record_as_csv) - ]) - with self.assertRaises(IndexError): - self.model2.save_record(record, 2) diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py deleted file mode 100644 index e796eb8..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py +++ /dev/null @@ -1,219 +0,0 @@ -from .. import widgets -from unittest import TestCase -from unittest.mock import Mock -import tkinter as tk -from tkinter import ttk - - -class TkTestCase(TestCase): - """A test case designed for Tkinter widgets and views""" - - keysyms = { - '-': 'minus', - ' ': 'space', - ':': 'colon', - # For more see http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm - } - @classmethod - def setUpClass(cls): - cls.root = tk.Tk() - cls.root.wait_visibility() - - @classmethod - def tearDownClass(cls): - cls.root.update() - cls.root.destroy() - - def type_in_widget(self, widget, string): - widget.focus_force() - for char in string: - char = self.keysyms.get(char, char) - self.root.update() - widget.event_generate(''.format(char)) - self.root.update() - - def click_on_widget(self, widget, x, y, button=1): - widget.focus_force() - self.root.update() - widget.event_generate("".format(button), x=x, y=y) - self.root.update() - - -class TestValidatedMixin(TkTestCase): - - def setUp(self): - class TestClass(widgets.ValidatedMixin, ttk.Entry): - pass - self.vw1 = TestClass(self.root) - - def assertEndsWith(self, text, ending): - if not text.endswith(ending): - raise AssertionError( - "'{}' does not end with '{}'".format(text, ending) - ) - - def test_init(self): - - # check error var setup - self.assertIsInstance(self.vw1.error, tk.StringVar) - - # check validation config - self.assertEqual(self.vw1.cget('validate'), 'all') - self.assertEndsWith( - self.vw1.cget('validatecommand'), - '%P %s %S %V %i %d' - ) - self.assertEndsWith( - self.vw1.cget('invalidcommand'), - '%P %s %S %V %i %d' - ) - - def test__validate(self): - - # by default, _validate should return true - args = { - 'proposed': 'abc', - 'current': 'ab', - 'char': 'c', - 'event': 'key', - 'index': '2', - 'action': '1' - } - # test key validate routing - self.assertTrue( - self.vw1._validate(**args) - ) - fake_key_val = Mock(return_value=False) - self.vw1._key_validate = fake_key_val - self.assertFalse( - self.vw1._validate(**args) - ) - fake_key_val.assert_called_with(**args) - - # test focusout validate routing - args['event'] = 'focusout' - self.assertTrue(self.vw1._validate(**args)) - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - self.assertFalse(self.vw1._validate(**args)) - fake_focusout_val.assert_called_with(event='focusout') - - - def test_trigger_focusout_validation(self): - - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - fake_focusout_invalid = Mock() - self.vw1._focusout_invalid = fake_focusout_invalid - - val = self.vw1.trigger_focusout_validation() - self.assertFalse(val) - fake_focusout_val.assert_called_with(event='focusout') - fake_focusout_invalid.assert_called_with(event='focusout') - - -class TestValidatedSpinbox(TkTestCase): - - def setUp(self): - self.value = tk.DoubleVar() - self.vsb = widgets.ValidatedSpinbox( - self.root, - textvariable=self.value, - from_=-10, to=10, increment=1 - ) - self.vsb.pack() - self.vsb.wait_visibility() - - def tearDown(self): - self.vsb.destroy() - - def key_validate(self, new, current=''): - return self.vsb._key_validate( - new, # inserted char - 'end', # position to insert - current, # current value - current + new, # proposed value - '1' # action code (1 == insert) - ) - - def click_arrow(self, arrow='inc', times=1): - x = self.vsb.winfo_width() - 5 - y = 5 if arrow == 'inc' else 15 - for _ in range(times): - self.click_on_widget(self.vsb, x=x, y=y) - - def test__key_validate(self): - ################### - # Unit-test Style # - ################### - - # test valid input - for x in range(10): - x = str(x) - p_valid = self.vsb._key_validate(x, 'end', '', x, '1') - n_valid = self.vsb._key_validate(x, 'end', '-', '-' + x, '1') - self.assertTrue(p_valid) - self.assertTrue(n_valid) - - # test letters - valid = self.key_validate('a') - self.assertFalse(valid) - - # test non-increment number - valid = self.key_validate('1', '0.') - self.assertFalse(valid) - - # test too high number - valid = self.key_validate('0', '10') - self.assertFalse(valid) - - def test__key_validate_integration(self): - ########################## - # Integration test style # - ########################## - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '10') - self.assertEqual(self.vsb.get(), '10') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, 'abcdef') - self.assertEqual(self.vsb.get(), '') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '200') - self.assertEqual(self.vsb.get(), '2') - - def test__focusout_validate(self): - - # test valid - for x in range(10): - self.value.set(x) - posvalid = self.vsb._focusout_validate() - self.value.set(-x) - negvalid = self.vsb._focusout_validate() - - self.assertTrue(posvalid) - self.assertTrue(negvalid) - - # test too low - self.value.set('-200') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - # test invalid number - self.vsb.delete(0, 'end') - self.vsb.insert('end', '-a2-.3') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - def test_arrows(self): - self.value.set(0) - self.click_arrow(times=1) - self.assertEqual(self.vsb.get(), '1') - - self.click_arrow(times=5) - self.assertEqual(self.vsb.get(), '6') - - self.click_arrow(arrow='dec', times=1) - self.assertEqual(self.vsb.get(), '5') diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index e0fdf39..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,569 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT -from . import images - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, style='', cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - if style: - frame.configure(style=style) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # new for ch9 - style = ttk.Style() - - # Frame styles - style.configure( - 'RecordInfo.TLabelframe', - background='khaki', padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe', background='lightblue', - padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe', - background='lightgreen', padx=10, pady=10 - ) - # Style the label Element as well - style.configure( - 'RecordInfo.TLabelframe.Label', background='khaki', - padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe.Label', - background='lightblue', padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe.Label', - background='lightgreen', padx=10, pady=10 - ) - - # Style for the form labels and buttons - style.configure('RecordInfo.TLabel', background='khaki') - style.configure('RecordInfo.TRadiobutton', background='khaki') - style.configure('EnvironmentInfo.TLabel', background='lightblue') - style.configure( - 'EnvironmentInfo.TCheckbutton', - background='lightblue' - ) - style.configure('PlantInfo.TLabel', background='lightgreen') - - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # new chapter 8 - # variable to track current record id - self.current_record = None - - # Label for displaying what record we're editing - self.record_label = ttk.Label(self) - self.record_label.grid(row=0, column=0) - - # Record info section - r_info = self._add_frame( - "Record Information", 'RecordInfo.TLabelframe' - ) - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=1) - # swap order for chapter 12 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - label_args={'style': 'RecordInfo.TLabel'}, - input_args={'style': 'RecordInfo.TRadiobutton'} - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame( - "Environment Data", 'EnvironmentInfo.TLabelframe' - ) - - e_info = ttk.LabelFrame( - self, - text="Environment Data", - style='EnvironmentInfo.TLabelframe' - ) - e_info.grid(row=2, column=0, sticky="we") - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - disable_var=self._vars['Equipment Fault'], - var=self._vars['Temperature'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'}, - input_args={'style': 'EnvironmentInfo.TCheckbutton'} - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data", 'PlantInfo.TLabelframe') - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=2) - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={"max_var": max_height_var, - "focus_update_var": min_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={"min_var": min_height_var, - "focus_update_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={"min_var": min_height_var, - "max_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=2) - - - # Notes section -- Update grid row value for ch8 - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=4, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=5) - self.save_button_logo = tk.PhotoImage(file=images.SAVE_ICON) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save, - image=self.save_button_logo, compound=tk.LEFT - ) - self.savebutton.pack(side=tk.RIGHT) - - self.reset_button_logo = tk.PhotoImage(file=images.RESET_ICON) - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset, - image=self.reset_button_logo, compound=tk.LEFT - ) - self.resetbutton.pack(side=tk.RIGHT) - - # new for ch12 - # Triggers - for field in ('Lab', 'Plot'): - self._vars[field].trace_add( - 'write', self._populate_current_seed_sample) - - for field in ('Date', 'Time', 'Lab'): - self._vars[field].trace_add( - 'write', self._populate_tech_for_lab_check) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - # rewrite for ch12 - def load_record(self, rowkey, data=None): - """Load a record's data into the form""" - self.current_record = rowkey - if rowkey is None: - self.reset() - self.record_label.config(text='New Record') - else: - date, time, lab, plot = rowkey - title = f'Record for Lab {lab}, Plot {plot} at {date} {time}' - self.record_label.config(text=title) - for key, var in self._vars.items(): - var.set(data.get(key, '')) - try: - var.label_widget.input.trigger_focusout_validation() - except AttributeError: - pass - - # new for ch12 - - def _populate_current_seed_sample(self, *_): - """Auto-populate the current seed sample for Lab and Plot""" - if not self.settings['autofill sheet data'].get(): - return - plot = self._vars['Plot'].get() - lab = self._vars['Lab'].get() - - if plot and lab: - seed = self.model.get_current_seed_sample(lab, plot) - self._vars['Seed Sample'].set(seed) - - def _populate_tech_for_lab_check(self, *_): - """Populate technician based on the current lab check""" - if not self.settings['autofill sheet data'].get(): - return - date = self._vars['Date'].get() - try: - datetime.fromisoformat(date) - except ValueError: - return - time = self._vars['Time'].get() - lab = self._vars['Lab'].get() - - if all([date, time, lab]): - check = self.model.get_lab_check(date, time, lab) - tech = check['lab_tech'] if check else '' - self._vars['Technician'].set(tech) - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) - - -class RecordList(tk.Frame): - """Display for CSV file contents""" - - column_defs = { - '#0': {'label': 'Row', 'anchor': tk.W}, - 'Date': {'label': 'Date', 'width': 150, 'stretch': True}, - 'Time': {'label': 'Time'}, - 'Lab': {'label': 'Lab', 'width': 40}, - 'Plot': {'label': 'Plot', 'width': 80} - } - default_width = 100 - default_minwidth = 10 - default_anchor = tk.CENTER - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self._inserted = list() - self._updated = list() - self.columnconfigure(0, weight=1) - self.rowconfigure(0, weight=1) - - # New ch12 - self.iid_map = dict() - - # create treeview - self.treeview = ttk.Treeview( - self, - columns=list(self.column_defs.keys())[1:], - selectmode='browse' - ) - self.treeview.grid(row=0, column=0, sticky='NSEW') - - # Configure treeview columns - for name, definition in self.column_defs.items(): - label = definition.get('label', '') - anchor = definition.get('anchor', self.default_anchor) - minwidth = definition.get('minwidth', self.default_minwidth) - width = definition.get('width', self.default_width) - stretch = definition.get('stretch', False) - self.treeview.heading(name, text=label, anchor=anchor) - self.treeview.column( - name, anchor=anchor, minwidth=minwidth, - width=width, stretch=stretch - ) - - self.treeview.bind('', self._on_open_record) - self.treeview.bind('', self._on_open_record) - - # configure scrollbar for the treeview - self.scrollbar = ttk.Scrollbar( - self, - orient=tk.VERTICAL, - command=self.treeview.yview - ) - self.treeview.configure(yscrollcommand=self.scrollbar.set) - self.scrollbar.grid(row=0, column=1, sticky='NSW') - - # configure tagging - self.treeview.tag_configure('inserted', background='lightgreen') - self.treeview.tag_configure('updated', background='lightblue') - - # For ch12, hide first column since row # is no longer meaningful - self.treeview.config(show='headings') - - # new for ch12 - - # update for ch12 - def populate(self, rows): - """Clear the treeview and write the supplied data rows to it.""" - - for row in self.treeview.get_children(): - self.treeview.delete(row) - - self.iid_map.clear() - - cids = list(self.column_defs.keys())[1:] - for rowdata in rows: - values = [rowdata[key] for key in cids] - rowkey = tuple([str(v) for v in values]) - if rowkey in self._inserted: - tag = 'inserted' - elif rowkey in self._updated: - tag = 'updated' - else: - tag = '' - # new ch12 -- save generated IID, assign to rowkey - iid = self.treeview.insert( - '', 'end', values=values, tag=tag) - self.iid_map[iid] = rowkey - - if len(rows) > 0: - firstrow = self.treeview.identify_row(0) - self.treeview.focus_set() - self.treeview.selection_set(firstrow) - self.treeview.focus(firstrow) - - # update for ch12 - def _on_open_record(self, *_): - """Handle record open request""" - self.event_generate('<>') - - @property - def selected_id(self): - selection = self.treeview.selection() - return self.iid_map[selection[0]] if selection else None - - - def add_updated_row(self, row): - if row not in self._updated: - self._updated.append(row) - - def add_inserted_row(self, row): - if row not in self._inserted: - self._inserted.append(row) - - def clear_tags(self): - self._inserted.clear() - self._updated.clear() diff --git a/Chapter14/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter14/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index ec72ed4..0000000 --- a/Chapter14/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,441 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - style = ttk.Style() - widget_class = self.winfo_class() - validated_style = 'ValidatedInput.' + widget_class - style.map( - validated_style, - foreground=[('invalid', 'white'), ('!invalid', 'black')], - fieldbackground=[('invalid', 'darkred'), ('!invalid', 'white')] - ) - self.configure(style=validated_style) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - pass - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.input.error = getattr(button, 'error', None) - self.input.trigger_focusout_validation = \ - button._focusout_validate - else: - self.input = input_class(self, **input_args) - - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - error_style = 'Error.' + label_args.get('style', 'TLabel') - ttk.Style().configure(error_style, foreground='darkred') - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error, style=error_style).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter14/ABQ_Data_Entry/docs/Application_layout.png b/Chapter14/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter14/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter14/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter14/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index fec5e84..0000000 --- a/Chapter14/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,97 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - - -Description ------------ -The program is being created to minimize data entry errors for laboratory measurements. - -Functionality Required ----------------------- - -The program must: - -* Provide a UI for reading, updating, and appending data to the CSV file -* allow all relevant, valid data to be entered, as per the field chart -* append entered data to a CSV file - - The CSV file must have a filename of abq_data_record_CURRENTDATE.csv, - where CURRENTDATE is the date of the checks in ISO format (Year-month-day) - - The CSV file must have all the fields as per the chart - -* enforce correct datatypes per field -* have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout -* prevent saving the record when errors are present - -The program should try, whenever possible, to: - -* enforce reasonable limits on data entered -* Auto-fill data -* Suggest likely correct values -* Provide a smooth and efficient workflow - -Functionality Not Required --------------------------- - -The program does not need to: - -* Allow deletion of data. - -Limitations ------------ - -The program must: - -* Be efficiently operable by keyboard-only users. -* Be accessible to color blind users. -* Run on Debian Linux. -* Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+----------+------+------------------+--------------------------+ -|Field | Datatype | Units| Range |Descripton | -+============+==========+======+==================+==========================+ -|Date |Date | | |Date of record | -+------------+----------+------+------------------+--------------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00 | | -+------------+----------+------+------------------+--------------------------+ -|Lab |String | | A - C |Lab ID | -+------------+----------+------+------------------+--------------------------+ -|Technician |String | | |Technician name | -+------------+----------+------+------------------+--------------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+----------+------+------------------+--------------------------+ -|Seed |String | | |Seed sample ID | -|sample | | | | | -+------------+----------+------+------------------+--------------------------+ -|Fault |Bool | | |Fault on environmental | -| | | | |sensor | -+------------+----------+------+------------------+--------------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -+------------+----------+------+------------------+--------------------------+ -|Humidity |Decimal |g/m³ | 0.5 - 52.0 |Abs humidity at plot | -+------------+----------+------+------------------+--------------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -+------------+----------+------+------------------+--------------------------+ -|Blossoms |Int | | 0 - 1000 |Number of blossoms in plot| -+------------+----------+------+------------------+--------------------------+ -|Fruit |Int | | 0 - 1000 |Number of fruits in plot | -+------------+----------+------+------------------+--------------------------+ -|Plants |Int | | 0 - 20 |Number of plants in plot | -+------------+----------+------+------------------+--------------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest plant in| -| | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest plant | -| | | | |in plot | -+------------+----------+------+------------------+--------------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of plants in| -|height | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+----------+------+------------------+--------------------------+ diff --git a/Chapter14/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter14/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter14/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter14/ABQ_Data_Entry/sql/abq_sample_data.sql b/Chapter14/ABQ_Data_Entry/sql/abq_sample_data.sql deleted file mode 100644 index fd4316c..0000000 --- a/Chapter14/ABQ_Data_Entry/sql/abq_sample_data.sql +++ /dev/null @@ -1,1767 +0,0 @@ -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 4291); - - -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 3, 'AXM479', 24.17, 0.97, 21.33, false, 15, 13, 1, 14.20, 1.56, 11.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 7, 'AXM479', 24.25, 0.99, 20.43, false, 2, 6, 0, 11.58, 2.27, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 11, 'AXM479', 24.15, 0.98, 21.06, false, 13, 13, 1, 10.90, 1.90, 6.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 15, 'AXM479', 24.24, 1.01, 22.03, false, 34, 20, 3, 18.16, 1.77, 15.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 19, 'AXM479', 24.43, 1.01, 21.05, false, 11, 11, 1, 19.18, 1.99, 13.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 3, 'AXM479', 24.50, 0.98, 20.91, false, 26, 17, 4, 14.20, 2.19, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 7, 'AXM479', 24.06, 0.98, 20.20, false, 0, 0, 0, 16.36, 2.25, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 11, 'AXM479', 23.97, 1.03, 21.29, false, 10, 11, 0, 16.00, 2.09, 7.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 15, 'AXM479', 23.94, 1.01, 21.33, false, 28, 16, 4, 18.50, 2.21, 18.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 19, 'AXM479', 23.86, 1.02, 20.35, false, 5, 8, 0, 9.86, 1.71, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 3, 'AXM479', 24.42, 1.03, 21.93, false, 39, 14, 0, 14.20, 1.96, 13.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 7, 'AXM479', 23.61, 0.97, 20.21, false, 1, 2, 0, 15.40, 1.68, 2.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 11, 'AXM479', 24.48, 1.00, 20.74, false, 1, 13, 0, 16.04, 1.53, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 15, 'AXM479', 23.93, 1.00, 20.35, false, 32, 18, 2, 17.05, 1.52, 3.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 19, 'AXM479', 23.71, 0.99, 20.48, false, 21, 14, 2, 17.33, 1.65, 11.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 4, 'AXM480', 23.63, 1.03, 21.89, false, 5, 5, 1, 16.27, 2.23, 13.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 2, 'AXM478', 23.62, 1.03, 20.26, false, 34, 17, 5, 9.20, 1.74, 3.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 6, 'AXM478', 23.93, 1.00, 20.59, false, 6, 3, 1, 12.20, 2.21, 4.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 10, 'AXM478', 24.09, 0.98, 20.29, false, 1, 2, 0, 14.27, 1.62, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 14, 'AXM478', 24.35, 1.02, 21.68, false, 9, 12, 0, 13.41, 1.69, 6.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 18, 'AXM478', 23.88, 1.02, 20.26, false, 11, 8, 2, 8.46, 1.85, 6.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 2, 'AXM478', 23.64, 1.02, 21.67, false, 41, 3, 2, 9.20, 1.77, 6.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 6, 'AXM478', 24.49, 1.01, 21.31, false, 30, 17, 3, 18.72, 1.79, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 10, 'AXM478', 23.59, 1.00, 20.98, false, 10, 14, 1, 7.98, 2.03, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 14, 'AXM478', 24.32, 0.97, 20.78, false, 5, 8, 1, 14.82, 1.75, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 18, 'AXM478', 23.61, 1.00, 20.35, false, 33, 18, 1, 14.25, 2.18, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 2, 'AXM478', 24.41, 0.98, 20.17, false, 21, 7, 2, 9.20, 2.01, 3.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 6, 'AXM478', 24.28, 0.99, 20.39, false, 8, 14, 1, 13.58, 1.51, 3.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 10, 'AXM478', 23.57, 1.01, 21.87, false, 21, 19, 1, 13.55, 2.02, 5.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 14, 'AXM478', 24.11, 1.03, 20.44, false, 20, 11, 1, 10.10, 2.49, 5.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 18, 'AXM478', 24.35, 0.99, 20.25, false, 12, 9, 2, 18.41, 1.88, 9.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 8, 'AXM480', 23.59, 1.00, 20.79, false, 27, 20, 0, 16.44, 1.99, 2.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 12, 'AXM480', 23.71, 0.99, 21.00, false, 11, 15, 2, 15.55, 1.99, 5.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 16, 'AXM480', 24.15, 1.01, 20.84, false, 12, 20, 1, 7.59, 2.18, 2.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 20, 'AXM480', 24.13, 1.02, 22.02, false, 5, 11, 1, 7.32, 2.07, 2.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 4, 'AXM480', 24.33, 1.01, 21.08, false, 7, 8, 0, 7.06, 2.32, 5.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 8, 'AXM480', 23.90, 1.03, 22.00, false, 4, 10, 1, 18.24, 2.02, 6.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 12, 'AXM480', 23.75, 1.01, 21.98, false, 6, 5, 1, 17.15, 1.53, 1.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 16, 'AXM480', 23.74, 0.99, 21.92, false, 0, 3, 0, 10.57, 1.59, 3.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 20, 'AXM480', 23.52, 0.99, 21.71, false, 6, 15, 1, 16.82, 1.94, 7.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 4, 'AXM480', 24.24, 0.99, 21.23, false, 19, 15, 2, 17.08, 2.18, 15.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 8, 'AXM480', 24.05, 1.02, 22.00, false, 13, 8, 1, 9.82, 2.38, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 12, 'AXM480', 24.46, 1.02, 21.33, false, 5, 5, 0, 14.71, 1.53, 2.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 16, 'AXM480', 24.39, 0.98, 21.82, false, 20, 10, 1, 11.26, 2.21, 4.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 20, 'AXM480', 23.53, 0.98, 21.34, false, 31, 19, 5, 8.25, 2.16, 8.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 3, 'AXM479', 24.60, 9.81, 24.90, false, 16, 13, 1, 14.36, 1.86, 11.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 7, 'AXM479', 24.32, 10.26, 24.71, false, 3, 7, 0, 11.70, 2.45, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 11, 'AXM479', 26.14, 10.46, 25.26, false, 13, 13, 1, 11.06, 2.08, 6.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 15, 'AXM479', 28.21, 9.97, 24.02, false, 36, 20, 4, 18.19, 1.99, 15.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 19, 'AXM479', 27.14, 9.50, 24.57, false, 11, 11, 2, 19.31, 2.13, 13.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 3, 'AXM479', 26.73, 9.62, 25.51, false, 27, 17, 4, 14.23, 2.50, 4.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 7, 'AXM479', 25.69, 10.31, 25.39, false, 0, 1, 1, 16.37, 2.35, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 11, 'AXM479', 25.82, 9.69, 25.70, false, 11, 11, 1, 16.16, 2.11, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 15, 'AXM479', 24.35, 9.59, 24.79, false, 29, 17, 4, 18.56, 2.49, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 19, 'AXM479', 27.32, 9.88, 25.64, false, 5, 8, 0, 9.92, 2.08, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 3, 'AXM479', 27.97, 10.29, 24.38, false, 41, 15, 1, 14.30, 2.09, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 7, 'AXM479', 23.70, 9.71, 24.53, false, 1, 2, 0, 15.44, 1.75, 2.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 3, 'AXM479', 28.34, 8.96, 26.08, false, 27, 18, 5, 14.30, 2.67, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 6, 'AXM478', 24.90, 10.22, 24.35, false, 7, 3, 2, 12.31, 2.44, 4.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 10, 'AXM478', 25.80, 9.67, 25.46, false, 2, 2, 0, 14.47, 1.87, 4.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 14, 'AXM478', 26.70, 10.39, 24.78, false, 10, 13, 1, 13.59, 1.73, 6.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 18, 'AXM478', 24.88, 9.70, 24.80, false, 13, 8, 2, 8.58, 2.16, 6.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 2, 'AXM478', 24.32, 9.80, 24.26, false, 43, 4, 2, 9.25, 1.79, 7.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 6, 'AXM478', 25.76, 10.28, 24.87, false, 32, 18, 3, 18.90, 2.02, 8.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 10, 'AXM478', 27.36, 10.15, 24.98, false, 10, 15, 1, 8.13, 2.35, 5.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 14, 'AXM478', 27.28, 10.18, 25.21, false, 5, 8, 2, 14.85, 1.85, 14.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 18, 'AXM478', 26.30, 9.83, 24.33, false, 33, 18, 1, 14.34, 2.20, 11.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 2, 'AXM478', 27.09, 10.33, 24.69, false, 23, 8, 3, 9.34, 2.16, 3.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 6, 'AXM478', 25.58, 10.42, 24.64, false, 10, 14, 2, 13.64, 1.88, 3.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 4, 'AXM480', 26.13, 10.30, 24.31, false, 5, 5, 2, 16.35, 2.34, 14.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 8, 'AXM480', 25.54, 10.07, 24.60, false, 28, 20, 1, 16.55, 2.05, 2.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 12, 'AXM480', 26.51, 10.46, 24.94, false, 13, 16, 2, 15.56, 2.10, 5.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 16, 'AXM480', 26.37, 9.64, 24.95, false, 12, 20, 2, 7.78, 2.41, 2.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 20, 'AXM480', 27.08, 10.29, 25.37, false, 6, 11, 1, 7.39, 2.38, 2.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 4, 'AXM480', 26.41, 10.37, 25.76, false, 9, 9, 0, 7.24, 2.48, 5.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 8, 'AXM480', 27.08, 10.36, 24.54, false, 5, 10, 2, 18.39, 2.16, 6.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 12, 'AXM480', 26.62, 9.94, 25.01, false, 6, 6, 2, 17.33, 1.69, 1.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 16, 'AXM480', 24.32, 9.88, 25.22, false, 2, 4, 0, 10.62, 1.76, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 20, 'AXM480', 26.62, 9.60, 25.84, false, 6, 15, 2, 16.84, 2.20, 7.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 4, 'AXM480', 27.93, 9.83, 24.86, false, 19, 16, 3, 17.21, 2.50, 15.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 2, 'AXM478', 24.89, 10.20, 26.01, false, 35, 17, 6, 9.27, 1.86, 3.87, ' -'); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 11, 'AXM479', 26.99, 10.15, 24.59, false, 1, 13, 0, 16.11, 1.68, 6.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 15, 'AXM479', 24.81, 9.90, 24.74, false, 33, 18, 3, 17.25, 1.52, 3.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 19, 'AXM479', 24.36, 10.23, 24.77, false, 23, 14, 2, 17.35, 1.68, 11.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 3, 'AXM479', 25.08, 7.07, 26.30, false, 17, 13, 2, 14.37, 2.12, 11.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 7, 'AXM479', 27.47, 7.79, 27.04, false, 3, 8, 0, 11.76, 2.76, 6.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 11, 'AXM479', 27.57, 7.09, 26.67, false, 15, 13, 2, 11.17, 2.43, 6.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 15, 'AXM479', 28.55, 7.60, 26.72, false, 36, 20, 4, 18.21, 2.04, 15.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 19, 'AXM479', 29.21, 8.04, 27.27, false, 13, 11, 3, 19.35, 2.52, 13.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 12, 'AXM480', 24.90, 10.09, 24.21, false, 7, 6, 1, 14.73, 1.76, 2.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 14, 'AXM478', 26.97, 9.56, 24.88, false, 20, 11, 1, 10.17, 2.62, 5.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 18, 'AXM478', 26.07, 10.43, 26.13, false, 14, 10, 3, 18.51, 1.97, 9.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 2, 'AXM478', 28.49, 8.37, 27.13, false, 35, 18, 6, 9.45, 2.10, 3.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 6, 'AXM478', 27.51, 8.12, 27.27, false, 9, 3, 3, 12.41, 2.79, 4.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 10, 'AXM478', 25.84, 7.47, 26.38, false, 2, 2, 0, 14.52, 1.97, 4.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 14, 'AXM478', 30.34, 8.66, 27.43, false, 10, 13, 2, 13.68, 1.76, 6.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 18, 'AXM478', 28.67, 8.70, 26.29, false, 15, 8, 2, 8.74, 2.40, 6.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 2, 'AXM478', 25.69, 8.10, 26.67, false, 45, 5, 3, 9.27, 1.92, 7.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 16, 'AXM480', 26.95, 10.19, 25.18, false, 22, 11, 2, 11.30, 2.34, 4.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 20, 'AXM480', 26.27, 9.55, 25.52, false, 31, 20, 6, 8.36, 2.29, 8.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 4, 'AXM480', 28.02, 8.94, 26.09, false, 6, 5, 2, 16.40, 2.59, 14.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 8, 'AXM480', 26.49, 8.14, 27.17, false, 30, 20, 2, 16.61, 2.21, 2.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 12, 'AXM480', 29.58, 7.90, 26.45, false, 14, 16, 2, 15.61, 2.40, 5.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 16, 'AXM480', 28.67, 8.84, 26.50, false, 12, 20, 2, 7.81, 2.45, 2.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 20, 'AXM480', 28.86, 7.12, 26.32, false, 8, 11, 1, 7.44, 2.57, 2.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 4, 'AXM480', 29.49, 8.12, 27.13, false, 9, 10, 0, 7.26, 2.78, 5.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 7, 'AXM479', 27.08, 8.63, 26.65, false, 2, 2, 2, 16.40, 2.67, 9.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 11, 'AXM479', 26.49, 7.76, 27.25, false, 13, 12, 1, 16.23, 2.39, 7.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 15, 'AXM479', 27.88, 8.94, 26.70, false, 31, 18, 5, 18.70, 2.78, 18.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 19, 'AXM479', 28.73, 8.17, 26.86, false, 7, 9, 1, 10.12, 2.15, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 3, 'AXM479', 30.64, 7.47, 26.41, false, 42, 16, 1, 14.32, 2.34, 13.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 7, 'AXM479', 26.50, 8.90, 27.56, false, 3, 2, 1, 15.56, 2.13, 2.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 11, 'AXM479', 30.61, 8.32, 26.15, false, 2, 13, 1, 16.26, 1.77, 6.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 15, 'AXM479', 28.69, 8.25, 26.74, false, 33, 18, 3, 17.38, 1.74, 3.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 19, 'AXM479', 27.64, 7.47, 27.00, false, 24, 15, 2, 17.35, 2.05, 11.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 8, 'AXM480', 28.28, 7.58, 26.16, false, 6, 11, 2, 18.42, 2.49, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 6, 'AXM478', 26.94, 8.26, 26.28, false, 32, 18, 4, 19.02, 2.39, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 10, 'AXM478', 28.55, 7.28, 26.04, false, 12, 15, 2, 8.19, 2.72, 5.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 14, 'AXM478', 28.23, 7.88, 26.31, false, 5, 8, 2, 15.01, 2.06, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 18, 'AXM478', 27.63, 7.55, 26.43, false, 34, 18, 2, 14.47, 2.42, 11.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 2, 'AXM478', 29.72, 7.99, 26.29, false, 25, 8, 4, 9.52, 2.34, 3.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 6, 'AXM478', 26.98, 7.53, 26.73, false, 12, 14, 2, 13.82, 1.96, 3.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 10, 'AXM478', 30.35, 8.07, 26.27, false, 23, 20, 3, 13.69, 2.49, 5.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 14, 'AXM478', 30.82, 8.18, 26.60, false, 22, 12, 2, 10.27, 2.63, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 18, 'AXM478', 27.85, 8.15, 27.35, false, 14, 10, 4, 18.64, 2.34, 9.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 12, 'AXM480', 27.93, 7.60, 26.65, false, 7, 7, 3, 17.53, 1.72, 1.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 16, 'AXM480', 28.27, 8.99, 26.20, false, 2, 4, 1, 10.70, 1.98, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 20, 'AXM480', 29.09, 7.07, 26.28, false, 8, 15, 3, 16.91, 2.53, 7.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 4, 'AXM480', 31.17, 7.85, 27.28, false, 20, 17, 4, 17.30, 2.56, 15.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 8, 'AXM480', 29.69, 8.51, 26.15, false, 15, 9, 2, 10.01, 2.88, 7.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 12, 'AXM480', 26.60, 7.60, 27.07, false, 7, 7, 2, 14.88, 1.88, 2.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 16, 'AXM480', 28.32, 7.43, 27.08, false, 23, 11, 3, 11.43, 2.37, 4.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 20, 'AXM480', 28.13, 8.44, 27.03, false, 32, 20, 7, 8.51, 2.33, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 3, 'AXM479', 28.50, 0.50, 22.14, false, 17, 14, 3, 14.37, 2.13, 11.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 7, 'AXM479', 27.54, 0.49, 22.32, false, 4, 9, 0, 11.90, 2.89, 6.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 11, 'AXM479', 29.97, 0.50, 22.36, false, 17, 14, 2, 11.27, 2.44, 6.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 15, 'AXM479', 32.53, 0.53, 22.30, false, 38, 20, 4, 18.25, 2.25, 15.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 19, 'AXM479', 30.55, 0.50, 22.41, false, 13, 12, 4, 19.55, 2.63, 13.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 3, 'AXM479', 32.04, 0.50, 22.06, false, 29, 18, 6, 14.31, 2.73, 4.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 7, 'AXM479', 28.30, 0.50, 22.02, false, 4, 3, 3, 16.59, 2.94, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 11, 'AXM479', 26.56, 0.49, 22.04, false, 15, 13, 2, 16.38, 2.42, 7.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 15, 'AXM479', 28.13, 0.48, 22.44, false, 33, 18, 5, 18.81, 3.05, 18.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 19, 'AXM479', 32.37, 0.47, 22.29, false, 7, 10, 1, 10.13, 2.18, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 3, 'AXM479', 32.17, 0.48, 22.12, false, 44, 16, 2, 14.37, 2.74, 13.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 7, 'AXM479', 27.73, 0.53, 22.39, false, 5, 3, 1, 15.74, 2.33, 2.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 11, 'AXM479', 33.51, 0.53, 22.34, false, 2, 13, 2, 16.32, 1.78, 6.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 15, 'AXM479', 29.20, 0.49, 22.18, false, 34, 19, 3, 17.53, 2.08, 3.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 19, 'AXM479', 30.04, 0.50, 22.16, false, 25, 15, 3, 17.47, 2.42, 11.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 4, 'AXM480', 28.53, 0.50, 22.44, false, 8, 6, 3, 16.55, 2.77, 14.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 2, 'AXM478', 29.31, 0.52, 22.04, false, 37, 19, 6, 9.55, 2.31, 4.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 6, 'AXM478', 30.78, 0.50, 22.46, false, 10, 4, 4, 12.50, 2.89, 4.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 10, 'AXM478', 28.92, 0.53, 22.22, false, 4, 2, 0, 14.69, 2.36, 4.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 14, 'AXM478', 31.60, 0.50, 22.02, false, 10, 14, 2, 13.84, 1.82, 6.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 18, 'AXM478', 30.93, 0.48, 22.13, false, 17, 9, 3, 8.93, 2.45, 6.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 2, 'AXM478', 27.66, 0.51, 22.08, false, 45, 6, 4, 9.35, 2.31, 7.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 6, 'AXM478', 30.75, 0.49, 22.37, false, 33, 18, 5, 19.02, 2.50, 8.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 10, 'AXM478', 31.09, 0.51, 22.21, false, 14, 16, 2, 8.35, 2.91, 5.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 14, 'AXM478', 29.44, 0.48, 22.43, false, 5, 8, 3, 15.06, 2.41, 14.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 18, 'AXM478', 30.94, 0.47, 22.13, false, 34, 19, 2, 14.56, 2.57, 11.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 2, 'AXM478', 32.38, 0.50, 22.02, false, 25, 9, 4, 9.71, 2.59, 3.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 6, 'AXM478', 30.70, 0.51, 22.50, false, 14, 15, 3, 13.83, 2.21, 3.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 10, 'AXM478', 30.48, 0.50, 22.40, false, 23, 20, 3, 13.78, 2.54, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 14, 'AXM478', 33.62, 0.51, 22.47, false, 22, 13, 2, 10.29, 2.63, 5.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 18, 'AXM478', 29.78, 0.52, 22.25, false, 16, 11, 5, 18.83, 2.53, 9.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 8, 'AXM480', 27.64, 0.50, 22.36, false, 31, 20, 2, 16.77, 2.42, 2.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 12, 'AXM480', 32.17, 0.48, 22.34, false, 14, 16, 2, 15.62, 2.72, 5.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 16, 'AXM480', 31.76, 0.49, 22.08, false, 12, 20, 3, 7.90, 2.53, 2.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 20, 'AXM480', 31.28, 0.48, 22.21, false, 9, 12, 1, 7.64, 2.63, 2.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 4, 'AXM480', 30.36, 0.49, 22.45, false, 9, 10, 1, 7.37, 3.03, 5.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 8, 'AXM480', 30.65, 0.49, 22.01, false, 6, 12, 3, 18.51, 2.73, 6.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 12, 'AXM480', 31.68, 0.51, 22.03, false, 8, 7, 4, 17.54, 1.86, 1.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 16, 'AXM480', 30.60, 0.50, 22.49, false, 2, 4, 2, 10.87, 1.98, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 20, 'AXM480', 32.09, 0.49, 22.08, false, 8, 15, 3, 16.91, 2.57, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 4, 'AXM480', 34.09, 0.51, 22.25, false, 21, 18, 5, 17.49, 2.77, 15.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 8, 'AXM480', 31.47, 0.51, 22.14, false, 17, 9, 2, 10.15, 3.14, 7.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 12, 'AXM480', 26.93, 0.51, 22.21, false, 7, 8, 3, 15.07, 1.89, 2.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 16, 'AXM480', 29.29, 0.52, 22.17, false, 23, 12, 3, 11.54, 2.71, 4.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 20, 'AXM480', 29.28, 0.51, 22.40, false, 34, 20, 7, 8.52, 2.58, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 3, 'AXM479', 23.94, 0.99, 20.28, false, 12, 6, 0, 14.20, 2.01, 7.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 7, 'AXM479', 24.36, 1.00, 20.26, false, 16, 20, 2, 11.22, 1.98, 4.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 11, 'AXM479', 23.73, 1.00, 21.94, false, 2, 12, 0, 7.62, 1.82, 5.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 15, 'AXM479', 24.18, 0.99, 21.34, false, 12, 13, 1, 13.33, 2.49, 5.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 19, 'AXM479', 24.29, 1.00, 20.85, false, 7, 8, 0, 18.89, 2.42, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 3, 'AXM479', 23.62, 1.03, 21.57, false, 52, 19, 7, 14.20, 1.67, 9.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 7, 'AXM479', 24.05, 0.98, 21.53, false, 1, 3, 0, 7.80, 2.18, 4.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 11, 'AXM479', 24.24, 0.99, 20.31, false, 5, 11, 1, 7.41, 2.44, 6.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 15, 'AXM479', 24.44, 1.02, 21.18, false, 8, 4, 1, 12.48, 2.41, 11.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 19, 'AXM479', 24.20, 1.01, 20.45, false, 8, 5, 2, 18.34, 2.23, 13.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 3, 'AXM479', 23.60, 1.00, 20.38, false, 28, 13, 5, 14.20, 1.67, 12.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 7, 'AXM479', 24.39, 1.02, 21.37, false, 9, 7, 1, 9.26, 1.60, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 3, 'AXM479', 24.03, 10.11, 24.54, false, 52, 20, 7, 14.22, 2.04, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 2, 'AXM478', 23.56, 1.00, 20.53, false, 12, 16, 2, 9.20, 1.63, 5.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 6, 'AXM478', 23.95, 1.00, 21.06, false, 1, 1, 0, 16.01, 1.68, 9.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 10, 'AXM478', 24.07, 1.02, 21.42, false, 20, 10, 3, 8.26, 1.97, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 14, 'AXM478', 24.45, 0.99, 21.22, false, 8, 7, 1, 11.85, 2.28, 10.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 18, 'AXM478', 23.82, 1.03, 20.78, false, 5, 8, 1, 8.30, 2.09, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 2, 'AXM478', 23.56, 0.97, 21.26, false, 25, 3, 1, 9.20, 1.59, 1.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 6, 'AXM478', 24.06, 0.99, 21.20, false, 21, 19, 4, 17.70, 2.45, 6.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 10, 'AXM478', 23.55, 0.98, 21.23, false, 4, 5, 0, 19.87, 2.28, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 14, 'AXM478', 23.92, 1.00, 20.76, false, 10, 15, 0, 8.03, 2.43, 6.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 18, 'AXM478', 24.14, 1.00, 21.22, false, 5, 4, 0, 11.43, 2.11, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 2, 'AXM478', 24.11, 0.99, 20.74, false, 38, 20, 3, 9.20, 2.23, 8.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 6, 'AXM478', 24.03, 1.00, 21.06, false, 20, 11, 1, 12.88, 1.87, 12.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 4, 'AXM480', 23.84, 0.98, 21.27, false, 33, 19, 4, 10.91, 2.30, 2.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 8, 'AXM480', 23.73, 1.01, 20.62, false, 23, 13, 2, 7.41, 2.06, 2.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 12, 'AXM480', 23.74, 1.02, 21.37, false, 33, 20, 2, 16.64, 1.53, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 16, 'AXM480', 24.32, 0.97, 20.14, false, 19, 19, 3, 8.79, 2.00, 7.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 20, 'AXM480', 23.59, 1.01, 20.33, false, 1, 19, 0, 9.17, 1.52, 7.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 4, 'AXM480', 23.63, 0.97, 21.82, false, 0, 2, 0, 9.72, 1.94, 3.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 8, 'AXM480', 23.58, 1.00, 20.81, false, 20, 19, 2, 8.97, 1.72, 4.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 12, 'AXM480', 23.69, 0.98, 21.60, false, 3, 11, 1, 8.43, 1.86, 5.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 16, 'AXM480', 23.85, 1.02, 21.50, false, 10, 7, 2, 11.72, 2.25, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 20, 'AXM480', 23.53, 1.01, 20.90, false, 9, 7, 0, 7.97, 2.09, 4.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 4, 'AXM480', 23.80, 0.98, 21.01, false, 1, 1, 0, 9.66, 1.77, 2.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 11, 'AXM479', 24.39, 0.99, 21.47, false, 0, 3, 0, 19.84, 2.07, 9.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 15, 'AXM479', 23.85, 1.00, 20.70, false, 4, 14, 1, 10.21, 1.98, 2.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 19, 'AXM479', 24.23, 0.99, 21.86, false, 4, 19, 1, 19.53, 2.21, 4.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 3, 'AXM479', 26.98, 10.11, 25.04, false, 14, 7, 1, 14.26, 2.15, 7.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 7, 'AXM479', 25.91, 10.25, 24.05, false, 16, 20, 2, 11.24, 1.98, 4.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 11, 'AXM479', 24.69, 10.44, 24.02, false, 3, 12, 0, 7.65, 1.85, 5.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 15, 'AXM479', 27.34, 9.78, 25.26, false, 12, 13, 2, 13.38, 2.50, 5.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 19, 'AXM479', 27.36, 10.32, 24.46, false, 8, 8, 0, 19.03, 2.74, 4.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 12, 'AXM480', 23.87, 0.98, 20.07, false, 1, 4, 0, 19.10, 1.69, 2.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 14, 'AXM478', 23.64, 0.99, 20.84, false, 11, 6, 1, 19.11, 1.96, 4.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 18, 'AXM478', 24.25, 0.97, 20.57, false, 6, 12, 0, 8.00, 2.29, 6.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 2, 'AXM478', 26.31, 9.97, 25.34, false, 12, 16, 3, 9.33, 1.67, 5.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 6, 'AXM478', 26.00, 9.87, 25.03, false, 2, 1, 1, 16.08, 1.79, 9.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 10, 'AXM478', 25.19, 9.83, 24.19, false, 20, 10, 3, 8.32, 2.23, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 14, 'AXM478', 28.28, 10.04, 24.38, false, 9, 8, 1, 11.91, 2.52, 10.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 18, 'AXM478', 26.88, 9.78, 25.87, false, 5, 9, 2, 8.48, 2.25, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 2, 'AXM478', 25.18, 10.44, 24.70, false, 25, 4, 1, 9.30, 1.68, 1.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 16, 'AXM480', 24.45, 1.03, 21.50, false, 9, 11, 1, 12.42, 2.28, 8.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 20, 'AXM480', 23.51, 1.01, 20.88, false, 0, 0, 0, 10.18, 1.72, 5.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 4, 'AXM480', 26.36, 9.86, 25.38, false, 34, 20, 5, 10.99, 2.59, 2.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 8, 'AXM480', 23.78, 9.80, 25.39, false, 25, 14, 3, 7.42, 2.08, 2.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 12, 'AXM480', 24.78, 10.26, 26.00, false, 33, 20, 3, 16.81, 1.83, 7.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 16, 'AXM480', 27.38, 9.89, 24.44, false, 19, 19, 3, 8.84, 2.28, 7.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 20, 'AXM480', 24.35, 9.71, 24.93, false, 2, 19, 0, 9.25, 1.63, 7.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 4, 'AXM480', 25.38, 10.43, 24.28, false, 2, 2, 0, 9.83, 2.21, 3.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 7, 'AXM479', 24.06, 10.44, 24.92, false, 1, 3, 0, 7.98, 2.25, 4.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 11, 'AXM479', 28.04, 10.44, 24.91, false, 6, 12, 1, 7.55, 2.44, 6.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 15, 'AXM479', 27.18, 10.21, 24.91, false, 9, 5, 1, 12.62, 2.81, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 19, 'AXM479', 24.93, 9.56, 24.68, false, 9, 5, 2, 18.49, 2.53, 13.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 3, 'AXM479', 26.96, 9.98, 24.62, false, 28, 13, 6, 14.38, 1.80, 12.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 7, 'AXM479', 25.99, 10.11, 25.05, false, 9, 7, 1, 9.36, 1.86, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 11, 'AXM479', 26.16, 10.04, 24.24, false, 2, 3, 0, 20.02, 2.21, 9.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 15, 'AXM479', 27.01, 10.26, 25.58, false, 5, 15, 2, 10.29, 2.26, 2.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 19, 'AXM479', 28.22, 9.77, 24.20, false, 6, 20, 2, 19.66, 2.59, 4.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 8, 'AXM480', 26.23, 9.92, 24.50, false, 20, 19, 2, 9.03, 1.84, 4.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 6, 'AXM478', 26.13, 9.62, 25.23, false, 21, 20, 4, 17.80, 2.84, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 10, 'AXM478', 25.91, 9.96, 24.35, false, 4, 6, 0, 20.00, 2.65, 5.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 14, 'AXM478', 27.87, 9.54, 24.57, false, 11, 15, 1, 8.22, 2.75, 6.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 18, 'AXM478', 25.61, 10.23, 24.28, false, 7, 4, 0, 11.45, 2.16, 6.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 2, 'AXM478', 26.02, 9.58, 25.71, false, 39, 20, 4, 9.27, 2.36, 8.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 6, 'AXM478', 27.24, 10.11, 25.65, false, 21, 12, 2, 13.00, 2.12, 12.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 10, 'AXM478', 26.01, 10.08, 25.45, false, 14, 11, 3, 9.28, 1.75, 2.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 14, 'AXM478', 26.15, 9.70, 25.50, false, 11, 7, 2, 19.29, 2.25, 4.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 18, 'AXM478', 24.84, 10.15, 25.19, false, 8, 13, 1, 8.06, 2.33, 6.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 12, 'AXM480', 24.08, 9.52, 25.29, false, 5, 11, 2, 8.46, 2.19, 5.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 16, 'AXM480', 25.39, 9.98, 24.04, false, 10, 7, 3, 11.86, 2.59, 5.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 20, 'AXM480', 24.07, 10.11, 24.15, false, 10, 8, 1, 8.02, 2.24, 4.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 4, 'AXM480', 25.39, 9.52, 25.61, false, 1, 1, 0, 9.76, 1.89, 2.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 8, 'AXM480', 24.78, 10.23, 26.02, false, 3, 12, 0, 9.76, 2.02, 4.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 12, 'AXM480', 23.95, 10.23, 24.64, false, 2, 5, 1, 19.13, 2.05, 2.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 16, 'AXM480', 26.01, 9.71, 25.85, false, 9, 12, 1, 12.43, 2.62, 8.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 20, 'AXM480', 26.00, 9.95, 25.04, false, 0, 0, 1, 10.24, 1.96, 5.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 3, 'AXM479', 29.52, 8.64, 26.24, false, 14, 7, 2, 14.34, 2.49, 7.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 7, 'AXM479', 28.99, 8.11, 26.89, false, 17, 20, 2, 11.29, 2.27, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 11, 'AXM479', 25.20, 8.28, 26.11, false, 5, 12, 0, 7.77, 1.86, 5.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 15, 'AXM479', 29.08, 8.65, 27.28, false, 13, 14, 3, 13.54, 2.80, 5.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 19, 'AXM479', 28.97, 7.53, 26.15, false, 8, 8, 1, 19.20, 2.91, 4.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 3, 'AXM479', 24.99, 8.69, 26.60, false, 53, 20, 8, 14.27, 2.06, 9.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 7, 'AXM479', 25.59, 8.92, 27.13, false, 2, 4, 0, 8.06, 2.40, 4.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 11, 'AXM479', 30.49, 8.89, 26.90, false, 8, 13, 2, 7.70, 2.77, 6.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 15, 'AXM479', 27.97, 8.18, 26.86, false, 11, 6, 2, 12.75, 3.01, 11.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 19, 'AXM479', 26.77, 8.91, 27.08, false, 11, 6, 2, 18.67, 2.89, 13.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 3, 'AXM479', 28.21, 8.26, 26.74, false, 29, 13, 6, 14.50, 2.20, 12.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 7, 'AXM479', 27.57, 7.04, 26.03, false, 10, 7, 1, 9.47, 2.26, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 11, 'AXM479', 27.57, 8.96, 26.33, false, 2, 3, 1, 20.11, 2.42, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 15, 'AXM479', 29.36, 8.64, 26.39, false, 7, 16, 2, 10.45, 2.63, 2.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 19, 'AXM479', 32.21, 8.67, 26.55, false, 6, 20, 3, 19.68, 2.77, 4.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 4, 'AXM480', 27.51, 8.56, 26.15, false, 34, 20, 5, 11.10, 2.91, 2.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 2, 'AXM478', 29.33, 7.20, 26.71, false, 12, 17, 4, 9.44, 2.05, 5.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 6, 'AXM478', 28.00, 8.93, 26.81, false, 2, 1, 2, 16.28, 1.92, 9.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 10, 'AXM478', 27.24, 7.82, 26.85, false, 22, 10, 4, 8.41, 2.49, 7.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 14, 'AXM478', 29.78, 7.17, 26.90, false, 9, 9, 1, 12.01, 2.81, 10.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 18, 'AXM478', 29.23, 8.20, 27.40, false, 7, 10, 2, 8.58, 2.55, 5.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 2, 'AXM478', 27.46, 8.42, 26.18, false, 25, 4, 1, 9.45, 1.84, 1.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 6, 'AXM478', 27.02, 8.54, 26.57, false, 23, 20, 4, 17.82, 2.96, 6.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 10, 'AXM478', 28.40, 7.75, 26.05, false, 6, 7, 0, 20.16, 3.02, 5.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 14, 'AXM478', 29.13, 7.92, 26.38, false, 12, 16, 1, 8.29, 3.09, 6.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 18, 'AXM478', 27.96, 8.14, 26.80, false, 8, 5, 1, 11.54, 2.26, 6.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 2, 'AXM478', 28.85, 7.20, 27.14, false, 39, 20, 5, 9.33, 2.56, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 6, 'AXM478', 30.73, 8.91, 26.23, false, 21, 13, 2, 13.20, 2.32, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 10, 'AXM478', 26.44, 7.42, 26.01, false, 14, 12, 4, 9.32, 1.83, 2.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 14, 'AXM478', 27.84, 7.06, 26.72, false, 11, 8, 3, 19.29, 2.31, 4.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 18, 'AXM478', 25.73, 8.12, 26.17, false, 9, 14, 2, 8.17, 2.38, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 8, 'AXM480', 25.95, 8.52, 27.41, false, 27, 15, 3, 7.49, 2.14, 2.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 12, 'AXM480', 26.96, 7.62, 26.66, false, 35, 20, 4, 16.90, 2.20, 7.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 16, 'AXM480', 30.54, 8.69, 27.14, false, 20, 20, 3, 9.03, 2.52, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 20, 'AXM480', 26.66, 8.74, 27.69, false, 4, 20, 1, 9.32, 1.74, 7.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 4, 'AXM480', 25.76, 7.58, 26.36, false, 3, 3, 0, 10.00, 2.53, 3.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 8, 'AXM480', 26.62, 7.39, 26.06, false, 20, 20, 2, 9.11, 1.85, 4.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 12, 'AXM480', 26.14, 8.05, 26.64, false, 6, 11, 3, 8.59, 2.26, 5.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 16, 'AXM480', 25.47, 8.06, 27.01, false, 10, 7, 3, 11.88, 2.61, 5.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 20, 'AXM480', 26.97, 7.18, 26.25, false, 10, 9, 1, 8.19, 2.28, 4.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 4, 'AXM480', 25.75, 7.80, 26.31, false, 2, 1, 1, 9.92, 2.27, 2.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 8, 'AXM480', 28.66, 7.80, 26.40, false, 5, 13, 1, 9.79, 2.13, 4.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 12, 'AXM480', 24.82, 8.65, 26.78, false, 4, 5, 2, 19.32, 2.09, 3.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 16, 'AXM480', 28.74, 8.90, 26.72, false, 11, 12, 2, 12.58, 2.73, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 20, 'AXM480', 28.77, 7.83, 26.81, false, 2, 1, 1, 10.42, 2.23, 5.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 3, 'AXM479', 31.95, 0.48, 22.15, false, 15, 8, 3, 14.46, 2.70, 8.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 7, 'AXM479', 30.70, 0.50, 22.43, false, 19, 20, 2, 11.37, 2.51, 4.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 11, 'AXM479', 28.53, 0.51, 22.35, false, 6, 13, 1, 7.93, 2.00, 5.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 15, 'AXM479', 29.44, 0.52, 22.06, false, 15, 14, 3, 13.69, 2.81, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 19, 'AXM479', 29.88, 0.52, 22.04, false, 10, 8, 1, 19.40, 3.18, 4.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 3, 'AXM479', 26.11, 0.48, 22.38, false, 54, 20, 9, 14.28, 2.31, 9.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 7, 'AXM479', 26.14, 0.49, 22.32, false, 3, 5, 0, 8.23, 2.56, 4.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 11, 'AXM479', 33.03, 0.50, 22.36, false, 9, 14, 3, 7.88, 2.99, 6.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 15, 'AXM479', 30.35, 0.48, 22.10, false, 13, 7, 2, 12.90, 3.37, 11.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 19, 'AXM479', 27.35, 0.52, 22.28, false, 11, 7, 3, 18.67, 2.98, 13.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 3, 'AXM479', 28.60, 0.51, 22.19, false, 29, 14, 7, 14.60, 2.31, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 7, 'AXM479', 28.70, 0.51, 22.08, false, 11, 8, 1, 9.59, 2.44, 4.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 3, 'AXM479', 24.01, 0.98, 21.63, false, 58, 17, 0, 13.32, 4.48, 7.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 2, 'AXM478', 33.18, 0.48, 22.02, false, 14, 17, 5, 9.55, 2.20, 5.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 6, 'AXM478', 30.63, 0.49, 22.45, false, 2, 2, 2, 16.31, 2.00, 9.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 10, 'AXM478', 27.68, 0.52, 22.31, false, 22, 10, 4, 8.60, 2.69, 7.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 14, 'AXM478', 29.89, 0.53, 22.10, false, 9, 10, 1, 12.01, 2.93, 10.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 18, 'AXM478', 30.29, 0.47, 22.09, false, 8, 11, 2, 8.67, 2.92, 5.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 2, 'AXM478', 28.78, 0.51, 22.37, false, 25, 5, 2, 9.53, 2.01, 2.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 6, 'AXM478', 30.28, 0.52, 22.53, false, 25, 20, 5, 17.90, 3.02, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 10, 'AXM478', 32.13, 0.51, 22.31, false, 8, 8, 1, 20.18, 3.38, 5.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 14, 'AXM478', 29.51, 0.47, 22.32, false, 12, 16, 2, 8.45, 3.33, 6.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 18, 'AXM478', 29.37, 0.52, 22.06, false, 8, 6, 1, 11.72, 2.62, 6.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 2, 'AXM478', 32.15, 0.51, 22.32, false, 40, 20, 5, 9.35, 2.75, 9.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 6, 'AXM478', 33.20, 0.49, 22.13, false, 22, 14, 3, 13.33, 2.53, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 4, 'AXM480', 30.41, 0.52, 22.02, false, 35, 20, 5, 11.25, 3.11, 3.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 8, 'AXM480', 28.26, 0.51, 22.40, false, 27, 16, 3, 7.54, 2.48, 2.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 12, 'AXM480', 30.24, 0.52, 22.17, false, 36, 20, 4, 16.97, 2.41, 7.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 16, 'AXM480', 31.49, 0.49, 22.32, false, 20, 20, 3, 9.10, 2.71, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 20, 'AXM480', 29.57, 0.52, 22.42, false, 4, 20, 1, 9.39, 1.87, 7.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 4, 'AXM480', 27.95, 0.49, 22.40, false, 4, 3, 0, 10.07, 2.78, 3.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 8, 'AXM480', 29.91, 0.51, 22.40, false, 22, 20, 3, 9.15, 2.05, 4.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 12, 'AXM480', 26.60, 0.51, 22.48, false, 7, 12, 4, 8.75, 2.40, 5.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 16, 'AXM480', 26.76, 0.51, 22.44, false, 12, 7, 3, 11.93, 2.94, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 20, 'AXM480', 30.51, 0.52, 22.15, false, 12, 9, 2, 8.26, 2.42, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 4, 'AXM480', 26.48, 0.51, 22.05, false, 2, 2, 1, 9.94, 2.56, 2.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 11, 'AXM479', 30.49, 0.48, 22.33, false, 4, 4, 1, 20.26, 2.55, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 15, 'AXM479', 32.70, 0.52, 22.01, false, 9, 16, 3, 10.49, 2.65, 2.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 19, 'AXM479', 33.48, 0.51, 22.26, false, 8, 20, 3, 19.86, 2.92, 4.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 3, 'AXM479', 24.27, 1.00, 20.73, false, 41, 20, 1, 18.34, 3.75, 6.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 7, 'AXM479', 23.53, 1.02, 20.02, false, 42, 12, 2, 11.85, 3.72, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 11, 'AXM479', 23.64, 1.03, 21.54, false, 71, 20, 11, 12.60, 3.82, 5.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 15, 'AXM479', 23.59, 1.03, 21.12, false, 17, 5, 1, 16.20, 4.23, 14.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 19, 'AXM479', 24.10, 1.00, 21.42, false, 28, 9, 4, 14.89, 4.24, 8.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 12, 'AXM480', 25.12, 0.49, 22.47, false, 6, 5, 3, 19.41, 2.25, 3.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 14, 'AXM478', 28.62, 0.47, 22.24, false, 12, 8, 3, 19.39, 2.31, 4.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 18, 'AXM478', 26.71, 0.52, 22.09, false, 9, 15, 2, 8.32, 2.70, 6.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 2, 'AXM478', 23.52, 0.99, 20.09, false, 68, 18, 10, 20.04, 3.61, 5.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 6, 'AXM478', 23.79, 1.02, 21.46, false, 43, 17, 3, 13.44, 3.84, 11.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 10, 'AXM478', 23.74, 1.03, 21.59, false, 48, 14, 8, 13.40, 3.64, 9.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 14, 'AXM478', 23.94, 0.97, 20.44, false, 45, 15, 4, 18.27, 4.22, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 18, 'AXM478', 24.01, 1.00, 20.89, false, 40, 19, 8, 16.87, 4.19, 5.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 2, 'AXM478', 24.28, 1.02, 21.40, false, 56, 16, 1, 21.81, 3.78, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 16, 'AXM480', 30.32, 0.47, 22.38, false, 12, 13, 3, 12.74, 2.78, 8.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 20, 'AXM480', 32.52, 0.50, 22.36, false, 2, 1, 2, 10.45, 2.28, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 4, 'AXM480', 23.59, 0.98, 21.81, false, 71, 20, 11, 18.17, 3.60, 5.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 8, 'AXM480', 23.55, 1.01, 21.85, false, 42, 20, 2, 17.56, 4.25, 11.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 12, 'AXM480', 23.53, 0.98, 20.46, false, 55, 14, 2, 21.10, 3.61, 17.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 16, 'AXM480', 23.52, 1.01, 21.97, false, 20, 8, 2, 11.86, 3.53, 10.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 20, 'AXM480', 23.51, 1.02, 21.29, false, 15, 4, 1, 16.11, 4.35, 15.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 4, 'AXM480', 23.62, 0.98, 20.17, false, 50, 14, 5, 9.16, 3.71, 6.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 7, 'AXM479', 24.19, 0.99, 20.59, false, 13, 5, 0, 13.05, 3.86, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 11, 'AXM479', 24.48, 0.97, 21.43, false, 19, 5, 2, 21.13, 4.04, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 15, 'AXM479', 23.67, 1.01, 20.00, false, 28, 11, 4, 10.17, 4.08, 10.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 19, 'AXM479', 23.75, 1.02, 21.17, false, 49, 13, 8, 18.17, 4.49, 17.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 3, 'AXM479', 23.92, 1.01, 20.55, false, 29, 10, 5, 19.46, 3.52, 6.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 7, 'AXM479', 23.60, 0.97, 21.27, false, 22, 9, 0, 10.72, 4.46, 4.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 11, 'AXM479', 23.71, 1.01, 21.98, false, 33, 13, 3, 12.05, 3.56, 11.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 15, 'AXM479', 24.13, 0.98, 21.91, false, 19, 5, 2, 17.63, 3.63, 17.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 19, 'AXM479', 24.32, 1.01, 20.66, false, 12, 4, 2, 21.51, 3.97, 14.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 8, 'AXM480', 23.92, 1.02, 20.72, false, 27, 9, 5, 9.69, 3.63, 3.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 6, 'AXM478', 24.01, 1.00, 20.41, false, 10, 5, 1, 12.19, 4.10, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 10, 'AXM478', 24.08, 1.00, 20.37, false, 50, 14, 9, 13.22, 3.78, 9.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 14, 'AXM478', 24.17, 1.00, 21.24, false, 17, 5, 1, 20.08, 3.93, 8.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 18, 'AXM478', 24.41, 0.99, 21.56, false, 47, 20, 4, 21.55, 4.47, 13.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 2, 'AXM478', 24.11, 1.00, 21.38, false, 51, 16, 7, 21.08, 4.48, 18.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 6, 'AXM478', 24.02, 0.99, 20.42, false, 40, 20, 6, 20.30, 3.56, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 10, 'AXM478', 24.23, 1.00, 20.90, false, 38, 17, 5, 20.66, 3.99, 10.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 14, 'AXM478', 23.62, 1.00, 21.53, false, 57, 18, 3, 17.74, 4.44, 8.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 18, 'AXM478', 23.73, 1.00, 21.90, false, 64, 20, 1, 9.41, 4.38, 4.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 12, 'AXM480', 23.91, 1.00, 20.30, false, 17, 5, 3, 12.44, 4.32, 11.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 16, 'AXM480', 24.32, 1.00, 20.63, false, 57, 20, 10, 9.48, 4.45, 7.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 20, 'AXM480', 23.83, 1.02, 20.53, false, 41, 14, 7, 9.08, 4.13, 7.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 4, 'AXM480', 24.13, 1.02, 20.71, false, 71, 20, 8, 19.35, 3.51, 17.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 8, 'AXM480', 23.61, 1.00, 20.41, false, 31, 13, 5, 14.11, 3.91, 12.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 12, 'AXM480', 23.86, 1.01, 20.76, false, 42, 19, 3, 19.12, 4.13, 7.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 16, 'AXM480', 23.60, 0.99, 20.76, false, 46, 13, 9, 12.69, 4.10, 5.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 20, 'AXM480', 24.10, 1.02, 20.45, false, 61, 20, 7, 19.24, 4.32, 4.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 3, 'AXM479', 24.88, 9.53, 24.93, false, 42, 20, 2, 18.52, 3.79, 6.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 7, 'AXM479', 24.62, 9.85, 25.47, false, 44, 13, 2, 11.96, 3.81, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 11, 'AXM479', 26.30, 10.26, 24.31, false, 73, 20, 12, 12.73, 3.85, 5.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 15, 'AXM479', 25.76, 9.91, 25.00, false, 19, 6, 1, 16.22, 4.27, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 19, 'AXM479', 26.23, 9.84, 25.26, false, 30, 10, 4, 15.06, 4.58, 8.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 3, 'AXM479', 26.28, 10.34, 25.83, false, 58, 17, 0, 13.34, 4.77, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 7, 'AXM479', 25.05, 10.27, 24.77, false, 14, 6, 0, 13.24, 4.12, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 11, 'AXM479', 26.72, 9.55, 25.13, false, 19, 6, 3, 21.28, 4.34, 5.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 15, 'AXM479', 25.70, 9.84, 25.51, false, 29, 11, 5, 10.36, 4.09, 10.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 19, 'AXM479', 27.35, 10.23, 25.46, false, 49, 14, 8, 18.20, 4.74, 17.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 3, 'AXM479', 24.21, 9.91, 24.02, false, 31, 10, 5, 19.60, 3.73, 6.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 7, 'AXM479', 24.96, 10.26, 25.83, false, 22, 9, 0, 10.88, 4.49, 4.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 11, 'AXM479', 27.25, 10.33, 24.56, false, 35, 14, 3, 12.10, 3.82, 11.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 15, 'AXM479', 27.51, 10.32, 25.89, false, 20, 5, 3, 17.78, 3.94, 17.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 19, 'AXM479', 25.94, 9.78, 25.54, false, 13, 4, 2, 21.65, 4.28, 14.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 4, 'AXM480', 24.03, 9.98, 25.34, false, 72, 20, 11, 18.19, 3.87, 5.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 2, 'AXM478', 27.41, 10.07, 24.49, false, 68, 18, 11, 20.11, 3.98, 6.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 6, 'AXM478', 25.34, 9.55, 25.52, false, 43, 17, 4, 13.56, 4.21, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 10, 'AXM478', 23.93, 9.64, 25.75, false, 49, 15, 9, 13.46, 3.85, 9.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 14, 'AXM478', 27.69, 9.54, 25.76, false, 45, 16, 5, 18.44, 4.40, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 18, 'AXM478', 25.70, 10.39, 24.58, false, 40, 20, 8, 16.97, 4.23, 5.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 2, 'AXM478', 25.55, 10.09, 25.54, false, 56, 17, 2, 22.01, 4.06, 15.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 6, 'AXM478', 25.66, 9.64, 24.01, false, 11, 6, 1, 12.32, 4.24, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 10, 'AXM478', 25.47, 10.44, 25.31, false, 50, 15, 9, 13.29, 3.89, 9.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 14, 'AXM478', 25.91, 9.59, 24.66, false, 18, 6, 1, 20.13, 4.28, 8.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 18, 'AXM478', 24.72, 10.25, 24.80, false, 48, 20, 4, 21.60, 4.58, 13.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 2, 'AXM478', 25.20, 9.74, 25.42, false, 53, 17, 7, 21.13, 4.50, 18.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 6, 'AXM478', 25.42, 9.72, 25.36, false, 42, 20, 6, 20.33, 3.90, 9.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 10, 'AXM478', 24.33, 9.79, 25.27, false, 40, 18, 6, 20.73, 4.09, 10.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 14, 'AXM478', 23.81, 10.38, 24.35, false, 57, 18, 4, 17.78, 4.56, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 18, 'AXM478', 24.58, 10.36, 25.78, false, 65, 20, 1, 9.42, 4.54, 4.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 8, 'AXM480', 25.99, 9.67, 24.19, false, 42, 20, 3, 17.74, 4.29, 11.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 12, 'AXM480', 26.47, 10.01, 24.36, false, 56, 15, 3, 21.23, 3.83, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 16, 'AXM480', 27.17, 9.82, 24.08, false, 20, 9, 3, 11.93, 3.62, 10.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 20, 'AXM480', 26.81, 10.44, 25.59, false, 17, 5, 2, 16.29, 4.75, 15.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 4, 'AXM480', 24.26, 10.30, 24.74, false, 51, 14, 6, 9.33, 3.77, 6.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 8, 'AXM480', 24.38, 9.90, 25.88, false, 27, 9, 5, 9.86, 3.86, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 12, 'AXM480', 24.35, 10.49, 24.06, false, 19, 5, 4, 12.57, 4.41, 11.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 16, 'AXM480', 25.75, 10.30, 24.50, false, 58, 20, 10, 9.61, 4.57, 7.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 20, 'AXM480', 26.93, 10.46, 25.07, false, 41, 14, 7, 9.17, 4.28, 7.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 4, 'AXM480', 28.08, 10.29, 25.83, false, 72, 20, 9, 19.54, 3.67, 17.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 8, 'AXM480', 27.40, 10.06, 25.22, false, 31, 13, 6, 14.30, 4.09, 12.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 12, 'AXM480', 26.41, 9.54, 25.17, false, 42, 19, 3, 19.31, 4.49, 7.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 16, 'AXM480', 24.69, 10.03, 25.24, false, 46, 14, 10, 12.86, 4.46, 5.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 20, 'AXM480', 27.85, 10.38, 25.09, false, 63, 20, 8, 19.32, 4.51, 4.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 3, 'AXM479', 27.17, 8.33, 26.37, false, 44, 20, 2, 18.55, 3.82, 6.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 7, 'AXM479', 26.02, 8.40, 26.54, false, 46, 14, 3, 12.13, 4.18, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 11, 'AXM479', 27.41, 8.00, 26.59, false, 75, 20, 13, 12.82, 4.13, 5.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 15, 'AXM479', 26.91, 8.93, 26.52, false, 19, 7, 2, 16.35, 4.64, 14.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 19, 'AXM479', 28.02, 7.73, 26.71, false, 32, 11, 5, 15.18, 4.60, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 3, 'AXM479', 29.36, 8.50, 27.28, false, 58, 18, 0, 13.44, 4.82, 7.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 7, 'AXM479', 28.26, 7.06, 26.77, false, 14, 7, 0, 13.26, 4.21, 11.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 11, 'AXM479', 27.97, 7.08, 27.10, false, 19, 6, 3, 21.33, 4.73, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 15, 'AXM479', 25.75, 8.83, 26.26, false, 30, 11, 5, 10.44, 4.45, 10.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 19, 'AXM479', 30.98, 7.06, 26.88, false, 50, 14, 8, 18.31, 4.93, 17.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 3, 'AXM479', 24.45, 7.80, 26.23, false, 33, 10, 5, 19.72, 3.80, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 7, 'AXM479', 25.67, 8.27, 26.34, false, 24, 10, 0, 11.00, 4.87, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 3, 'AXM479', 31.27, 0.52, 22.10, false, 58, 19, 0, 13.53, 5.18, 7.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 2, 'AXM478', 28.41, 7.10, 26.82, false, 70, 18, 11, 20.22, 4.23, 6.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 6, 'AXM478', 29.09, 8.63, 26.35, false, 43, 18, 5, 13.67, 4.30, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 10, 'AXM478', 27.59, 8.78, 27.55, false, 51, 16, 9, 13.58, 4.06, 9.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 14, 'AXM478', 28.36, 8.76, 26.63, false, 46, 17, 5, 18.47, 4.68, 16.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 18, 'AXM478', 28.25, 7.87, 26.75, false, 40, 20, 8, 17.11, 4.24, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 2, 'AXM478', 25.81, 8.02, 26.86, false, 58, 17, 2, 22.14, 4.13, 15.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 6, 'AXM478', 26.88, 8.54, 27.21, false, 13, 6, 1, 12.38, 4.26, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 10, 'AXM478', 25.63, 7.28, 26.45, false, 51, 15, 9, 13.44, 4.13, 9.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 14, 'AXM478', 26.64, 8.51, 26.88, false, 19, 7, 2, 20.32, 4.28, 8.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 18, 'AXM478', 26.11, 8.93, 26.82, false, 50, 20, 5, 21.68, 4.94, 13.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 2, 'AXM478', 28.81, 7.23, 26.57, false, 53, 17, 8, 21.27, 4.81, 18.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 6, 'AXM478', 27.12, 7.85, 26.77, false, 43, 20, 6, 20.53, 4.07, 9.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 4, 'AXM480', 27.91, 8.19, 26.27, false, 72, 20, 12, 18.35, 4.21, 5.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 8, 'AXM480', 26.74, 7.49, 26.57, false, 44, 20, 3, 17.85, 4.30, 11.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 12, 'AXM480', 29.34, 7.38, 27.17, false, 58, 15, 3, 21.31, 3.99, 17.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 16, 'AXM480', 30.89, 7.47, 27.06, false, 21, 9, 4, 12.04, 3.86, 10.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 20, 'AXM480', 27.45, 7.38, 26.20, false, 18, 5, 2, 16.32, 4.92, 15.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 4, 'AXM480', 26.69, 8.55, 26.53, false, 53, 14, 6, 9.37, 3.81, 6.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 8, 'AXM480', 25.59, 8.62, 26.13, false, 29, 9, 5, 9.94, 3.88, 4.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 12, 'AXM480', 25.21, 7.51, 26.10, false, 19, 6, 4, 12.64, 4.65, 11.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 16, 'AXM480', 27.51, 7.50, 26.28, false, 60, 20, 11, 9.78, 4.92, 7.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 20, 'AXM480', 27.68, 8.05, 27.26, false, 42, 14, 8, 9.33, 4.45, 7.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 4, 'AXM480', 31.59, 7.63, 27.06, false, 74, 20, 10, 19.54, 3.69, 18.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 11, 'AXM479', 29.08, 7.07, 26.61, false, 36, 14, 4, 12.14, 4.21, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 15, 'AXM479', 27.89, 7.75, 26.40, false, 20, 6, 4, 17.91, 4.22, 17.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 19, 'AXM479', 29.30, 8.14, 27.40, false, 13, 5, 3, 21.70, 4.47, 14.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 3, 'AXM479', 29.58, 0.48, 22.27, false, 45, 20, 2, 18.67, 4.17, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 7, 'AXM479', 26.79, 0.52, 22.15, false, 47, 14, 3, 12.33, 4.50, 4.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 11, 'AXM479', 29.97, 0.51, 22.07, false, 77, 20, 14, 12.98, 4.37, 5.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 15, 'AXM479', 28.95, 0.51, 22.18, false, 21, 7, 2, 16.47, 4.93, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 19, 'AXM479', 29.81, 0.50, 22.23, false, 34, 11, 6, 15.27, 4.86, 9.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 12, 'AXM480', 29.89, 8.67, 27.21, false, 42, 20, 4, 19.50, 4.69, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 14, 'AXM478', 26.62, 7.48, 26.95, false, 59, 19, 4, 17.97, 4.85, 8.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 18, 'AXM478', 28.04, 8.19, 26.89, false, 67, 20, 1, 9.49, 4.87, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 2, 'AXM478', 31.80, 0.51, 22.33, false, 70, 19, 12, 20.37, 4.26, 6.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 6, 'AXM478', 30.73, 0.51, 22.17, false, 43, 19, 5, 13.74, 4.68, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 10, 'AXM478', 28.00, 0.50, 22.40, false, 53, 16, 9, 13.62, 4.26, 9.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 14, 'AXM478', 29.20, 0.50, 22.49, false, 48, 17, 6, 18.53, 4.90, 16.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 18, 'AXM478', 30.83, 0.52, 22.24, false, 40, 20, 8, 17.15, 4.63, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 2, 'AXM478', 28.10, 0.51, 22.49, false, 58, 18, 2, 22.33, 4.42, 15.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 16, 'AXM480', 28.52, 8.43, 26.91, false, 47, 14, 10, 13.04, 4.77, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 20, 'AXM480', 28.80, 8.02, 26.08, false, 63, 20, 9, 19.35, 4.78, 4.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 4, 'AXM480', 28.54, 0.47, 22.41, false, 74, 20, 13, 18.44, 4.43, 5.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 8, 'AXM480', 28.05, 0.49, 22.41, false, 46, 20, 4, 17.96, 4.62, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 12, 'AXM480', 30.55, 0.50, 22.16, false, 60, 16, 3, 21.35, 4.35, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 16, 'AXM480', 31.43, 0.48, 22.17, false, 23, 9, 5, 12.17, 3.93, 10.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 20, 'AXM480', 28.40, 0.53, 22.17, false, 19, 5, 2, 16.49, 5.02, 15.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 4, 'AXM480', 28.02, 0.50, 22.24, false, 55, 14, 6, 9.50, 4.12, 6.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 7, 'AXM479', 28.79, 0.48, 22.08, false, 14, 8, 1, 13.32, 4.39, 11.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 11, 'AXM479', 28.88, 0.50, 22.43, false, 21, 7, 4, 21.38, 5.11, 5.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 15, 'AXM479', 29.68, 0.52, 22.48, false, 30, 11, 5, 10.58, 4.52, 10.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 19, 'AXM479', 34.58, 0.52, 22.07, false, 51, 14, 8, 18.48, 5.15, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 3, 'AXM479', 27.09, 0.48, 22.30, false, 35, 10, 5, 19.86, 3.89, 6.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 7, 'AXM479', 28.43, 0.47, 22.26, false, 24, 11, 1, 11.10, 5.11, 5.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 11, 'AXM479', 30.65, 0.51, 22.09, false, 38, 15, 4, 12.19, 4.52, 11.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 15, 'AXM479', 29.69, 0.50, 22.09, false, 21, 6, 4, 17.93, 4.45, 17.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 19, 'AXM479', 31.70, 0.50, 22.31, false, 15, 5, 4, 21.81, 4.86, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 8, 'AXM480', 25.61, 0.51, 22.22, false, 31, 10, 6, 9.96, 4.06, 4.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 6, 'AXM478', 30.39, 0.52, 22.00, false, 15, 6, 1, 12.47, 4.47, 11.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 10, 'AXM478', 27.85, 0.51, 22.29, false, 52, 15, 10, 13.60, 4.15, 9.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 14, 'AXM478', 29.28, 0.52, 22.30, false, 19, 8, 2, 20.33, 4.38, 8.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 18, 'AXM478', 27.37, 0.49, 22.00, false, 51, 20, 6, 21.79, 5.16, 13.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 2, 'AXM478', 30.41, 0.51, 22.06, false, 55, 17, 8, 21.38, 4.93, 18.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 6, 'AXM478', 28.59, 0.52, 22.43, false, 44, 20, 7, 20.69, 4.32, 9.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 10, 'AXM478', 24.67, 0.51, 22.04, false, 42, 20, 6, 21.00, 4.44, 10.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 14, 'AXM478', 26.96, 0.49, 22.08, false, 59, 19, 5, 17.98, 5.14, 9.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 18, 'AXM478', 29.00, 0.50, 22.16, false, 67, 20, 1, 9.64, 5.06, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 12, 'AXM480', 28.05, 0.50, 22.29, false, 20, 6, 4, 12.68, 4.88, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 16, 'AXM480', 28.41, 0.50, 22.04, false, 60, 20, 11, 9.81, 4.99, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 20, 'AXM480', 31.37, 0.50, 22.43, false, 42, 15, 9, 9.38, 4.78, 7.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 4, 'AXM480', 35.39, 0.53, 22.16, false, 75, 20, 11, 19.63, 4.01, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 8, 'AXM480', 27.71, 0.52, 22.36, false, 32, 13, 7, 14.68, 4.45, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 12, 'AXM480', 31.39, 0.50, 22.31, false, 44, 20, 4, 19.68, 5.04, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 16, 'AXM480', 30.75, 0.51, 22.43, false, 49, 15, 10, 13.05, 4.92, 5.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 20, 'AXM480', 31.46, 0.47, 22.34, false, 65, 20, 10, 19.48, 4.90, 4.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 3, 'AXM479', 24.05, 1.03, 20.11, false, 66, 20, 11, 18.07, 5.67, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 7, 'AXM479', 24.31, 1.03, 20.08, false, 44, 9, 3, 15.02, 5.92, 11.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 11, 'AXM479', 24.09, 0.99, 21.12, false, 53, 11, 2, 14.72, 6.15, 9.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 15, 'AXM479', 24.14, 1.02, 21.97, false, 51, 13, 2, 16.02, 6.44, 10.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 19, 'AXM479', 24.12, 0.98, 21.09, false, 70, 17, 3, 17.96, 6.42, 8.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 3, 'AXM479', 24.39, 0.97, 21.87, false, 32, 7, 6, 15.85, 6.14, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 7, 'AXM479', 24.09, 1.03, 20.27, false, 65, 20, 7, 19.56, 5.81, 7.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 11, 'AXM479', 23.83, 0.98, 21.12, false, 69, 17, 12, 20.45, 6.45, 14.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 15, 'AXM479', 24.47, 1.03, 20.72, false, 36, 9, 6, 18.22, 5.70, 10.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 19, 'AXM479', 24.47, 1.01, 20.96, false, 89, 20, 4, 12.16, 6.00, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 3, 'AXM479', 23.70, 1.03, 22.10, false, 86, 20, 12, 11.19, 6.26, 8.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 7, 'AXM479', 23.98, 0.97, 21.02, false, 32, 8, 3, 21.01, 6.16, 11.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 11, 'AXM479', 24.02, 0.99, 21.85, false, 75, 16, 11, 12.18, 5.62, 7.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 15, 'AXM479', 23.81, 0.99, 21.28, false, 80, 16, 1, 20.10, 5.60, 12.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 19, 'AXM479', 23.57, 0.97, 20.61, false, 75, 20, 7, 12.67, 6.35, 6.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 4, 'AXM480', 24.25, 0.98, 20.07, false, 83, 20, 9, 12.38, 5.55, 9.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 2, 'AXM478', 23.94, 1.01, 21.52, false, 22, 7, 5, 16.07, 5.68, 15.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 6, 'AXM478', 23.75, 1.02, 21.84, false, 86, 20, 7, 16.70, 5.69, 7.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 10, 'AXM478', 23.93, 0.99, 21.67, false, 82, 20, 6, 20.82, 6.18, 9.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 14, 'AXM478', 23.57, 1.02, 21.70, false, 41, 11, 7, 15.11, 5.55, 6.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 18, 'AXM478', 23.53, 0.98, 20.69, false, 61, 20, 4, 19.21, 6.09, 12.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 2, 'AXM478', 24.39, 0.98, 21.67, false, 68, 20, 13, 12.63, 6.44, 6.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 6, 'AXM478', 24.47, 1.02, 20.74, false, 48, 12, 2, 12.61, 5.61, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 10, 'AXM478', 23.57, 1.01, 21.23, false, 82, 20, 3, 14.84, 5.73, 14.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 14, 'AXM478', 24.24, 0.97, 20.68, false, 43, 10, 9, 22.53, 5.68, 13.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 18, 'AXM478', 24.16, 1.00, 21.77, false, 51, 11, 2, 18.04, 5.94, 15.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 2, 'AXM478', 24.07, 0.98, 20.64, false, 36, 11, 3, 19.29, 5.82, 6.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 6, 'AXM478', 23.90, 1.02, 20.61, false, 96, 20, 14, 18.39, 5.59, 17.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 10, 'AXM478', 24.18, 0.98, 21.49, false, 54, 11, 5, 18.56, 5.95, 15.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 14, 'AXM478', 23.50, 1.01, 20.84, false, 80, 17, 2, 14.41, 6.21, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 18, 'AXM478', 23.60, 1.02, 21.19, false, 29, 8, 3, 13.59, 6.16, 8.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 8, 'AXM480', 24.40, 0.98, 20.82, false, 29, 7, 3, 11.97, 6.30, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 12, 'AXM480', 23.85, 1.01, 21.02, false, 62, 20, 2, 21.89, 6.38, 10.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 16, 'AXM480', 24.08, 1.03, 20.98, false, 61, 14, 11, 16.64, 5.66, 8.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 20, 'AXM480', 23.62, 1.01, 20.15, false, 39, 8, 5, 13.43, 6.06, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 4, 'AXM480', 24.19, 1.02, 21.27, false, 50, 13, 4, 19.46, 5.82, 14.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 8, 'AXM480', 24.16, 0.98, 20.81, false, 45, 15, 5, 12.32, 6.29, 9.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 12, 'AXM480', 23.82, 0.98, 21.11, false, 49, 12, 4, 21.61, 6.20, 16.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 16, 'AXM480', 23.89, 0.99, 21.35, false, 54, 15, 11, 19.04, 6.26, 10.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 20, 'AXM480', 24.12, 0.98, 21.66, false, 52, 11, 8, 12.83, 6.04, 9.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 4, 'AXM480', 23.74, 1.03, 21.37, false, 34, 9, 2, 12.64, 5.91, 6.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 8, 'AXM480', 23.71, 0.99, 20.70, false, 82, 20, 14, 16.48, 5.57, 9.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 12, 'AXM480', 24.43, 1.02, 22.00, false, 44, 11, 8, 17.87, 6.46, 9.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 16, 'AXM480', 24.48, 1.02, 21.44, false, 49, 14, 5, 14.73, 5.78, 5.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 20, 'AXM480', 23.72, 1.01, 21.37, false, 53, 12, 3, 20.64, 5.66, 9.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 3, 'AXM479', 25.92, 9.69, 25.40, false, 67, 20, 11, 18.19, 5.69, 15.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 7, 'AXM479', 27.39, 10.35, 24.97, false, 44, 10, 3, 15.03, 6.24, 11.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 11, 'AXM479', 27.24, 10.36, 26.02, false, 54, 12, 2, 14.81, 6.22, 9.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 15, 'AXM479', 27.02, 10.16, 24.15, false, 52, 14, 3, 16.18, 6.72, 10.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 19, 'AXM479', 25.76, 10.18, 24.40, false, 71, 18, 3, 18.08, 6.75, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 3, 'AXM479', 27.94, 9.56, 24.88, false, 34, 7, 6, 16.00, 6.52, 7.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 7, 'AXM479', 25.20, 10.08, 24.85, false, 65, 20, 7, 19.73, 6.02, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 11, 'AXM479', 24.18, 9.69, 25.79, false, 70, 17, 12, 20.60, 6.61, 14.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 15, 'AXM479', 28.11, 9.77, 25.13, false, 36, 10, 7, 18.37, 6.04, 10.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 19, 'AXM479', 24.88, 10.21, 25.21, false, 91, 20, 4, 12.30, 6.19, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 3, 'AXM479', 26.41, 10.00, 24.16, false, 86, 20, 13, 11.22, 6.37, 8.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 7, 'AXM479', 24.80, 10.05, 24.69, false, 34, 9, 3, 21.07, 6.24, 11.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 3, 'AXM479', 30.58, 9.00, 26.89, false, 34, 7, 6, 16.19, 6.89, 7.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 2, 'AXM478', 24.15, 9.86, 25.13, false, 24, 7, 5, 16.09, 5.77, 15.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 6, 'AXM478', 24.66, 10.22, 25.14, false, 88, 20, 8, 16.76, 5.92, 7.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 10, 'AXM478', 27.33, 10.09, 25.09, false, 84, 20, 6, 20.87, 6.24, 9.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 14, 'AXM478', 26.54, 9.99, 25.36, false, 43, 12, 8, 15.14, 5.65, 6.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 18, 'AXM478', 24.14, 10.00, 25.52, false, 62, 20, 5, 19.22, 6.36, 12.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 2, 'AXM478', 25.74, 9.70, 24.01, false, 69, 20, 13, 12.82, 6.76, 6.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 6, 'AXM478', 27.37, 9.56, 25.54, false, 49, 12, 3, 12.66, 5.78, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 10, 'AXM478', 24.43, 10.09, 25.34, false, 83, 20, 4, 14.93, 5.85, 14.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 14, 'AXM478', 26.62, 9.92, 25.52, false, 43, 11, 10, 22.55, 5.69, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 18, 'AXM478', 27.09, 10.10, 24.65, false, 53, 12, 3, 18.19, 5.95, 16.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 2, 'AXM478', 26.08, 9.62, 25.38, false, 36, 12, 4, 19.36, 5.89, 6.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 6, 'AXM478', 27.18, 9.68, 25.03, false, 96, 20, 15, 18.54, 5.79, 17.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 4, 'AXM480', 24.46, 9.63, 25.65, false, 84, 20, 9, 12.45, 5.59, 9.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 8, 'AXM480', 27.08, 10.48, 24.51, false, 29, 8, 3, 12.10, 6.64, 7.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 12, 'AXM480', 25.71, 10.02, 25.43, false, 63, 20, 2, 22.01, 6.47, 10.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 16, 'AXM480', 24.56, 9.58, 25.59, false, 63, 14, 11, 16.70, 5.79, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 20, 'AXM480', 27.08, 9.57, 24.91, false, 40, 8, 6, 13.49, 6.41, 11.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 4, 'AXM480', 24.58, 10.06, 25.36, false, 50, 13, 5, 19.49, 5.97, 14.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 8, 'AXM480', 24.47, 9.75, 25.87, false, 46, 16, 6, 12.33, 6.56, 9.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 12, 'AXM480', 26.45, 9.69, 25.52, false, 51, 13, 5, 21.65, 6.26, 16.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 16, 'AXM480', 25.91, 10.28, 24.91, false, 55, 16, 11, 19.08, 6.55, 10.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 20, 'AXM480', 27.57, 10.35, 25.93, false, 53, 11, 8, 12.93, 6.21, 9.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 4, 'AXM480', 26.34, 10.17, 26.02, false, 36, 9, 2, 12.79, 6.13, 6.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 11, 'AXM479', 25.67, 10.43, 25.02, false, 77, 16, 11, 12.26, 5.72, 8.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 15, 'AXM479', 27.55, 9.95, 24.03, false, 80, 16, 1, 20.16, 5.88, 12.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 19, 'AXM479', 25.78, 10.44, 25.24, false, 77, 20, 7, 12.75, 6.53, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 3, 'AXM479', 27.41, 7.04, 26.15, false, 69, 20, 11, 18.30, 6.04, 15.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 7, 'AXM479', 27.65, 7.65, 26.59, false, 44, 10, 4, 15.05, 6.38, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 11, 'AXM479', 28.43, 8.48, 26.20, false, 54, 13, 2, 14.91, 6.61, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 15, 'AXM479', 30.35, 7.82, 26.97, false, 54, 14, 3, 16.30, 6.83, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 19, 'AXM479', 28.17, 8.56, 26.84, false, 71, 19, 3, 18.22, 6.83, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 12, 'AXM480', 25.31, 9.66, 25.29, false, 46, 11, 9, 18.00, 6.56, 9.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 14, 'AXM478', 25.90, 9.84, 25.19, false, 81, 18, 3, 14.49, 6.54, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 18, 'AXM478', 24.41, 9.52, 25.67, false, 29, 9, 3, 13.69, 6.41, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 2, 'AXM478', 27.10, 8.78, 27.26, false, 25, 7, 5, 16.13, 6.16, 15.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 6, 'AXM478', 24.93, 8.10, 26.64, false, 88, 20, 8, 16.77, 6.12, 7.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 10, 'AXM478', 28.45, 8.90, 27.10, false, 86, 20, 6, 20.91, 6.35, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 14, 'AXM478', 27.19, 7.23, 26.48, false, 43, 13, 8, 15.17, 5.90, 6.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 18, 'AXM478', 25.87, 7.34, 26.20, false, 62, 20, 5, 19.30, 6.44, 12.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 2, 'AXM478', 28.66, 7.24, 26.74, false, 71, 20, 14, 12.99, 6.94, 6.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 16, 'AXM480', 28.00, 9.90, 25.51, false, 50, 15, 5, 14.88, 5.80, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 20, 'AXM480', 25.76, 10.16, 25.64, false, 54, 13, 4, 20.73, 5.85, 9.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 4, 'AXM480', 26.70, 8.42, 26.95, false, 85, 20, 9, 12.46, 5.62, 9.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 8, 'AXM480', 30.38, 7.05, 26.82, false, 30, 9, 3, 12.16, 6.83, 7.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 12, 'AXM480', 28.64, 8.65, 26.13, false, 64, 20, 2, 22.19, 6.75, 10.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 16, 'AXM480', 25.01, 8.39, 27.20, false, 63, 14, 12, 16.78, 6.11, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 20, 'AXM480', 30.56, 7.00, 26.40, false, 41, 8, 7, 13.53, 6.69, 11.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 4, 'AXM480', 26.18, 8.63, 27.02, false, 51, 13, 5, 19.62, 6.06, 14.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 7, 'AXM479', 27.34, 8.76, 27.10, false, 65, 20, 7, 19.86, 6.22, 7.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 11, 'AXM479', 26.55, 7.68, 26.76, false, 70, 18, 12, 20.76, 6.82, 14.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 15, 'AXM479', 28.56, 7.14, 27.09, false, 38, 10, 8, 18.39, 6.30, 10.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 19, 'AXM479', 27.61, 8.55, 26.62, false, 91, 20, 5, 12.39, 6.24, 11.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 3, 'AXM479', 30.41, 7.85, 26.37, false, 88, 20, 13, 11.38, 6.41, 8.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 7, 'AXM479', 25.07, 8.76, 27.30, false, 34, 9, 3, 21.19, 6.25, 11.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 11, 'AXM479', 27.94, 7.37, 26.78, false, 77, 17, 11, 12.45, 6.04, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 15, 'AXM479', 28.67, 8.10, 26.72, false, 81, 16, 1, 20.23, 5.92, 12.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 19, 'AXM479', 28.16, 8.01, 26.75, false, 78, 20, 7, 12.87, 6.84, 7.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 8, 'AXM480', 27.12, 7.68, 26.89, false, 46, 16, 7, 12.52, 6.56, 9.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 6, 'AXM478', 31.16, 9.00, 27.61, false, 51, 12, 4, 12.81, 6.03, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 10, 'AXM478', 25.30, 8.86, 26.77, false, 85, 20, 5, 15.05, 6.12, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 14, 'AXM478', 29.86, 7.86, 27.25, false, 45, 12, 10, 22.67, 6.00, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 18, 'AXM478', 29.51, 8.88, 27.74, false, 53, 12, 4, 18.37, 6.13, 16.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 2, 'AXM478', 26.95, 7.57, 26.05, false, 38, 13, 5, 19.46, 6.09, 6.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 6, 'AXM478', 30.37, 8.88, 27.34, false, 97, 20, 15, 18.67, 5.98, 17.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 10, 'AXM478', 31.35, 8.56, 27.14, false, 57, 12, 5, 18.77, 6.19, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 14, 'AXM478', 29.11, 8.27, 26.03, false, 82, 19, 4, 14.49, 6.60, 11.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 18, 'AXM478', 24.68, 8.18, 26.08, false, 30, 10, 3, 13.79, 6.73, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 12, 'AXM480', 28.84, 8.01, 26.48, false, 52, 13, 5, 21.69, 6.39, 17.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 16, 'AXM480', 27.87, 8.71, 26.57, false, 56, 16, 12, 19.21, 6.81, 10.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 20, 'AXM480', 28.63, 7.30, 26.41, false, 54, 11, 9, 13.10, 6.38, 10.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 4, 'AXM480', 29.87, 8.11, 26.70, false, 36, 10, 3, 12.90, 6.43, 6.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 8, 'AXM480', 27.38, 8.40, 27.15, false, 85, 20, 15, 16.61, 5.75, 9.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 12, 'AXM480', 28.47, 8.36, 26.10, false, 47, 12, 9, 18.16, 6.93, 9.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 16, 'AXM480', 29.96, 8.21, 26.76, false, 51, 16, 6, 14.94, 6.15, 6.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 20, 'AXM480', 27.31, 8.55, 26.81, false, 55, 13, 5, 20.90, 6.09, 9.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 3, 'AXM479', 31.33, 0.49, 22.31, false, 70, 20, 11, 18.37, 6.38, 15.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 7, 'AXM479', 29.51, 0.49, 22.01, false, 46, 10, 4, 15.10, 6.69, 11.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 11, 'AXM479', 28.78, 0.48, 22.29, false, 56, 14, 2, 14.99, 6.76, 10.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 15, 'AXM479', 33.63, 0.53, 22.01, false, 56, 14, 4, 16.33, 6.94, 10.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 19, 'AXM479', 30.56, 0.49, 22.24, false, 73, 19, 3, 18.23, 7.15, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 3, 'AXM479', 33.39, 0.51, 22.16, false, 34, 7, 6, 16.31, 6.90, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 7, 'AXM479', 27.81, 0.47, 22.37, false, 65, 20, 8, 19.93, 6.58, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 11, 'AXM479', 30.47, 0.48, 22.13, false, 72, 18, 12, 20.77, 7.18, 14.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 15, 'AXM479', 30.74, 0.52, 22.00, false, 38, 11, 8, 18.44, 6.47, 10.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 19, 'AXM479', 28.73, 0.52, 22.04, false, 93, 20, 6, 12.54, 6.25, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 3, 'AXM479', 30.62, 0.53, 22.33, false, 88, 20, 13, 11.54, 6.65, 8.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 7, 'AXM479', 26.44, 0.52, 22.28, false, 35, 10, 3, 21.26, 6.52, 11.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 11, 'AXM479', 30.62, 0.48, 22.35, false, 78, 18, 12, 12.47, 6.24, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 15, 'AXM479', 32.37, 0.50, 22.38, false, 82, 17, 1, 20.30, 6.08, 12.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 19, 'AXM479', 31.71, 0.51, 22.33, false, 78, 20, 8, 12.96, 7.02, 7.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 4, 'AXM480', 29.25, 0.49, 22.39, false, 85, 20, 10, 12.65, 6.01, 9.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 2, 'AXM478', 29.54, 0.52, 22.35, false, 26, 8, 6, 16.14, 6.55, 15.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 6, 'AXM478', 28.40, 0.51, 22.10, false, 89, 20, 9, 16.83, 6.41, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 10, 'AXM478', 29.19, 0.48, 22.09, false, 88, 20, 6, 20.95, 6.54, 10.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 14, 'AXM478', 30.13, 0.50, 22.09, false, 45, 13, 8, 15.34, 5.91, 6.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 18, 'AXM478', 28.13, 0.51, 22.26, false, 64, 20, 5, 19.37, 6.59, 12.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 2, 'AXM478', 30.31, 0.51, 22.13, false, 71, 20, 15, 13.00, 6.97, 7.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 6, 'AXM478', 33.32, 0.50, 22.08, false, 53, 12, 4, 12.88, 6.35, 11.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 10, 'AXM478', 27.84, 0.53, 22.32, false, 87, 20, 6, 15.25, 6.29, 14.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 14, 'AXM478', 30.37, 0.48, 22.36, false, 46, 12, 10, 22.74, 6.38, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 18, 'AXM478', 32.89, 0.49, 22.05, false, 54, 12, 5, 18.53, 6.41, 16.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 2, 'AXM478', 29.98, 0.48, 22.21, false, 39, 14, 6, 19.48, 6.25, 6.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 6, 'AXM478', 33.41, 0.51, 22.50, false, 98, 20, 16, 18.81, 6.33, 17.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 10, 'AXM478', 32.81, 0.50, 22.23, false, 58, 12, 6, 18.93, 6.49, 15.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 14, 'AXM478', 29.23, 0.47, 22.31, false, 84, 19, 5, 14.61, 6.73, 11.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 18, 'AXM478', 28.37, 0.51, 22.04, false, 30, 11, 4, 13.94, 7.11, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 8, 'AXM480', 32.80, 0.53, 22.39, false, 31, 10, 4, 12.26, 7.14, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 12, 'AXM480', 31.40, 0.51, 22.20, false, 66, 20, 3, 22.19, 7.07, 10.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 16, 'AXM480', 26.19, 0.53, 22.38, false, 65, 15, 12, 16.94, 6.41, 8.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 20, 'AXM480', 32.39, 0.49, 22.18, false, 41, 8, 8, 13.71, 6.95, 11.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 4, 'AXM480', 28.33, 0.52, 22.37, false, 53, 14, 5, 19.78, 6.18, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 8, 'AXM480', 30.15, 0.50, 22.01, false, 47, 17, 8, 12.62, 6.59, 9.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 12, 'AXM480', 31.58, 0.50, 22.42, false, 54, 14, 6, 21.87, 6.45, 17.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 16, 'AXM480', 29.99, 0.50, 22.22, false, 57, 16, 13, 19.36, 6.87, 10.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 20, 'AXM480', 31.37, 0.49, 22.38, false, 55, 12, 10, 13.20, 6.39, 10.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 4, 'AXM480', 32.20, 0.49, 22.00, false, 36, 10, 3, 13.09, 6.54, 6.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 8, 'AXM480', 28.87, 0.51, 22.22, false, 85, 20, 16, 16.63, 6.00, 9.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 12, 'AXM480', 30.16, 0.47, 22.36, false, 49, 12, 10, 18.34, 7.07, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 16, 'AXM480', 31.24, 0.48, 22.38, false, 51, 17, 7, 14.99, 6.36, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 20, 'AXM480', 28.85, 0.52, 22.52, false, 57, 13, 5, 21.03, 6.33, 9.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 3, 'AXM479', 24.16, 0.97, 20.80, false, 109, 17, 13, 13.45, 7.98, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 7, 'AXM479', 24.14, 0.99, 20.65, false, 104, 18, 5, 22.51, 8.37, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 11, 'AXM479', 23.90, 0.99, 21.70, false, 105, 16, 9, 17.30, 7.90, 10.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 15, 'AXM479', 23.60, 1.01, 21.97, false, 48, 8, 3, 15.16, 7.69, 9.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 19, 'AXM479', 23.62, 0.97, 21.66, false, 139, 20, 5, 24.07, 7.63, 23.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 3, 'AXM479', 23.79, 0.97, 20.38, false, 122, 20, 22, 24.55, 8.23, 14.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 7, 'AXM479', 24.49, 1.01, 21.62, false, 126, 20, 19, 14.27, 7.80, 9.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 11, 'AXM479', 24.24, 0.99, 21.09, false, 47, 8, 3, 18.17, 8.10, 12.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 15, 'AXM479', 23.94, 1.00, 21.57, false, 133, 20, 6, 17.57, 8.41, 10.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 19, 'AXM479', 24.27, 1.00, 20.06, false, 67, 10, 6, 16.74, 7.88, 14.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 3, 'AXM479', 23.97, 0.97, 21.16, false, 113, 20, 15, 25.96, 8.16, 8.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 7, 'AXM479', 24.47, 1.02, 21.88, false, 117, 20, 18, 15.31, 8.48, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 2, 'AXM478', 24.38, 1.00, 20.47, false, 51, 9, 12, 25.21, 8.29, 21.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 6, 'AXM478', 24.49, 1.03, 21.06, false, 105, 18, 19, 14.05, 7.73, 9.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 10, 'AXM478', 23.91, 1.01, 20.53, false, 65, 11, 9, 24.53, 8.06, 9.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 14, 'AXM478', 24.30, 1.01, 21.30, false, 80, 12, 10, 19.08, 8.25, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 18, 'AXM478', 23.74, 1.03, 21.87, false, 121, 20, 20, 19.67, 7.61, 10.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 2, 'AXM478', 23.95, 1.00, 21.62, false, 43, 8, 6, 15.84, 7.82, 10.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 6, 'AXM478', 23.92, 0.98, 21.80, false, 116, 19, 18, 13.78, 7.94, 13.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 10, 'AXM478', 23.87, 0.98, 21.89, false, 115, 19, 16, 21.38, 8.27, 14.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 14, 'AXM478', 23.81, 1.00, 21.45, false, 116, 19, 3, 17.25, 8.15, 14.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 18, 'AXM478', 24.44, 1.00, 21.19, false, 57, 10, 3, 24.53, 8.49, 20.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 2, 'AXM478', 23.51, 1.03, 21.01, false, 138, 20, 19, 20.29, 7.66, 9.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 6, 'AXM478', 23.69, 0.99, 20.35, false, 130, 20, 9, 20.69, 8.36, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 4, 'AXM480', 24.28, 0.99, 21.38, false, 66, 10, 6, 22.52, 8.06, 16.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 8, 'AXM480', 24.18, 1.01, 20.24, false, 103, 16, 7, 20.04, 7.68, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 12, 'AXM480', 23.63, 1.02, 21.42, false, 65, 10, 12, 16.70, 8.14, 15.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 16, 'AXM480', 24.09, 1.00, 21.11, false, 138, 20, 3, 16.94, 8.35, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 20, 'AXM480', 24.07, 0.99, 20.37, false, 59, 9, 12, 24.02, 7.55, 7.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 4, 'AXM480', 23.65, 0.98, 21.45, false, 121, 20, 11, 21.70, 7.50, 12.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 8, 'AXM480', 24.49, 0.98, 20.99, false, 101, 20, 19, 21.46, 8.28, 21.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 12, 'AXM480', 24.07, 0.98, 20.51, false, 84, 13, 6, 21.71, 7.82, 12.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 16, 'AXM480', 23.89, 1.02, 21.33, false, 74, 12, 13, 20.60, 7.56, 8.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 20, 'AXM480', 24.10, 0.98, 20.83, false, 124, 20, 11, 25.35, 8.02, 19.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 4, 'AXM480', 23.52, 0.99, 20.14, false, 54, 10, 6, 24.89, 7.59, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 11, 'AXM479', 24.22, 1.02, 20.73, false, 61, 11, 2, 14.69, 8.14, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 15, 'AXM479', 24.30, 1.03, 21.48, false, 56, 11, 7, 22.95, 7.67, 20.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 19, 'AXM479', 24.03, 1.02, 20.68, false, 100, 16, 9, 24.32, 8.13, 15.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 3, 'AXM479', 26.46, 10.01, 24.95, false, 109, 17, 14, 13.51, 8.24, 11.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 7, 'AXM479', 27.63, 9.58, 25.41, false, 105, 19, 5, 22.56, 8.63, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 11, 'AXM479', 24.18, 9.71, 25.70, false, 107, 17, 10, 17.50, 8.08, 10.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 15, 'AXM479', 27.03, 10.36, 24.17, false, 50, 9, 3, 15.34, 7.87, 9.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 19, 'AXM479', 25.84, 10.42, 24.78, false, 141, 20, 5, 24.17, 7.70, 23.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 12, 'AXM480', 24.33, 1.03, 21.87, false, 56, 11, 7, 18.76, 8.36, 14.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 14, 'AXM478', 24.22, 0.98, 21.84, false, 140, 20, 22, 15.48, 7.79, 12.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 18, 'AXM478', 24.14, 1.02, 21.83, false, 103, 18, 10, 19.11, 7.93, 13.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 2, 'AXM478', 27.04, 10.39, 25.07, false, 52, 10, 12, 25.22, 8.57, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 6, 'AXM478', 25.93, 10.45, 25.31, false, 105, 19, 19, 14.15, 7.80, 9.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 10, 'AXM478', 23.94, 9.77, 25.79, false, 67, 12, 9, 24.66, 8.14, 9.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 14, 'AXM478', 26.01, 9.90, 25.04, false, 80, 12, 10, 19.26, 8.44, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 18, 'AXM478', 26.29, 10.00, 25.24, false, 121, 20, 20, 19.75, 7.77, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 2, 'AXM478', 26.53, 9.52, 25.77, false, 43, 9, 7, 15.95, 8.15, 10.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 16, 'AXM480', 24.40, 0.98, 21.27, false, 115, 20, 24, 23.09, 7.98, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 20, 'AXM480', 23.51, 1.01, 21.22, false, 61, 12, 9, 25.87, 7.69, 17.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 4, 'AXM480', 27.55, 9.66, 24.62, false, 67, 10, 6, 22.71, 8.43, 16.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 8, 'AXM480', 27.38, 10.46, 25.14, false, 105, 16, 7, 20.13, 8.08, 18.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 12, 'AXM480', 24.51, 9.63, 24.77, false, 66, 10, 12, 16.81, 8.37, 15.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 16, 'AXM480', 24.17, 10.17, 24.44, false, 139, 20, 4, 17.12, 8.54, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 20, 'AXM480', 25.99, 9.79, 25.03, false, 61, 9, 13, 24.02, 7.75, 7.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 4, 'AXM480', 23.78, 10.05, 25.44, false, 122, 20, 12, 21.83, 7.72, 12.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 3, 'AXM479', 24.66, 10.05, 25.32, false, 122, 20, 22, 24.65, 8.58, 14.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 7, 'AXM479', 27.87, 10.19, 26.02, false, 126, 20, 19, 14.38, 8.19, 9.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 11, 'AXM479', 24.70, 9.63, 24.26, false, 49, 8, 4, 18.30, 8.37, 12.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 15, 'AXM479', 25.29, 10.43, 25.64, false, 133, 20, 7, 17.66, 8.65, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 19, 'AXM479', 24.40, 9.78, 25.40, false, 69, 11, 7, 16.87, 8.09, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 3, 'AXM479', 25.29, 10.01, 24.76, false, 114, 20, 15, 26.02, 8.16, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 7, 'AXM479', 27.28, 10.07, 25.48, false, 117, 20, 18, 15.47, 8.57, 14.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 11, 'AXM479', 25.53, 9.82, 24.33, false, 63, 11, 3, 14.86, 8.17, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 15, 'AXM479', 25.70, 10.11, 25.95, false, 58, 11, 8, 22.96, 8.04, 20.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 19, 'AXM479', 27.33, 10.44, 26.17, false, 102, 16, 10, 24.36, 8.18, 15.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 8, 'AXM480', 26.37, 10.48, 24.56, false, 102, 20, 19, 21.49, 8.59, 21.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 6, 'AXM478', 24.05, 9.91, 25.77, false, 116, 19, 19, 13.93, 8.30, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 10, 'AXM478', 24.23, 9.89, 24.57, false, 115, 20, 17, 21.57, 8.60, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 14, 'AXM478', 26.72, 9.86, 24.99, false, 117, 19, 4, 17.26, 8.36, 14.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 18, 'AXM478', 25.31, 10.10, 24.91, false, 57, 11, 4, 24.54, 8.69, 20.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 2, 'AXM478', 25.60, 9.51, 24.15, false, 140, 20, 20, 20.37, 7.87, 9.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 6, 'AXM478', 26.37, 9.80, 24.19, false, 130, 20, 9, 20.72, 8.50, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 10, 'AXM478', 24.33, 10.29, 24.89, false, 120, 20, 6, 21.00, 8.19, 14.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 14, 'AXM478', 25.92, 10.31, 25.06, false, 142, 20, 22, 15.66, 7.86, 12.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 18, 'AXM478', 27.25, 10.40, 24.79, false, 103, 18, 11, 19.17, 8.05, 13.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 12, 'AXM480', 25.92, 9.87, 25.59, false, 85, 14, 6, 21.84, 7.96, 12.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 16, 'AXM480', 25.16, 9.68, 25.17, false, 75, 13, 14, 20.66, 7.89, 8.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 20, 'AXM480', 26.78, 10.37, 26.05, false, 126, 20, 11, 25.37, 8.36, 19.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 4, 'AXM480', 24.78, 10.49, 24.65, false, 55, 11, 7, 25.07, 7.89, 15.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 8, 'AXM480', 24.87, 10.34, 24.15, false, 104, 20, 4, 14.58, 8.70, 10.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 12, 'AXM480', 26.62, 10.43, 24.19, false, 57, 11, 8, 18.83, 8.47, 14.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 16, 'AXM480', 26.99, 9.90, 24.67, false, 115, 20, 24, 23.22, 8.20, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 20, 'AXM480', 24.79, 9.51, 24.86, false, 63, 12, 10, 25.96, 7.82, 17.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 3, 'AXM479', 30.10, 8.18, 26.39, false, 110, 18, 15, 13.68, 8.45, 11.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 7, 'AXM479', 28.20, 8.44, 26.09, false, 105, 19, 6, 22.62, 8.88, 10.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 11, 'AXM479', 26.32, 8.99, 26.36, false, 109, 17, 11, 17.51, 8.28, 10.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 15, 'AXM479', 28.85, 7.97, 26.42, false, 50, 10, 3, 15.38, 8.11, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 19, 'AXM479', 29.06, 8.07, 26.31, false, 143, 20, 6, 24.26, 7.82, 23.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 3, 'AXM479', 25.75, 8.96, 27.02, false, 122, 20, 23, 24.74, 8.89, 14.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 7, 'AXM479', 29.42, 8.39, 27.27, false, 127, 20, 20, 14.51, 8.56, 9.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 11, 'AXM479', 27.37, 7.47, 26.37, false, 51, 9, 5, 18.42, 8.42, 12.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 15, 'AXM479', 28.57, 8.91, 26.15, false, 135, 20, 7, 17.69, 8.95, 10.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 19, 'AXM479', 27.30, 7.05, 26.02, false, 69, 12, 8, 16.90, 8.28, 14.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 3, 'AXM479', 27.14, 7.85, 26.41, false, 116, 20, 16, 26.22, 8.17, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 7, 'AXM479', 27.72, 8.45, 27.17, false, 119, 20, 18, 15.62, 8.58, 14.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 11, 'AXM479', 28.89, 7.37, 26.41, false, 64, 11, 4, 15.03, 8.35, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 15, 'AXM479', 28.71, 8.22, 26.56, false, 59, 11, 9, 23.05, 8.37, 20.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 19, 'AXM479', 30.32, 8.98, 26.17, false, 102, 17, 11, 24.41, 8.46, 15.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 4, 'AXM480', 28.25, 8.03, 26.98, false, 67, 10, 6, 22.79, 8.80, 16.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 2, 'AXM478', 30.89, 7.04, 26.33, false, 54, 11, 12, 25.27, 8.79, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 6, 'AXM478', 27.51, 8.01, 26.47, false, 107, 19, 20, 14.22, 7.92, 9.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 10, 'AXM478', 25.42, 8.62, 27.54, false, 69, 12, 9, 24.72, 8.38, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 14, 'AXM478', 26.42, 7.91, 26.51, false, 81, 12, 11, 19.36, 8.81, 18.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 18, 'AXM478', 27.24, 7.36, 26.40, false, 122, 20, 20, 19.82, 7.89, 10.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 2, 'AXM478', 26.55, 7.52, 27.11, false, 45, 9, 7, 16.12, 8.21, 10.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 6, 'AXM478', 26.79, 8.18, 26.26, false, 117, 20, 19, 14.09, 8.54, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 10, 'AXM478', 27.84, 7.55, 27.13, false, 115, 20, 18, 21.66, 8.72, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 14, 'AXM478', 30.71, 7.49, 26.51, false, 119, 20, 4, 17.26, 8.72, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 18, 'AXM478', 28.87, 7.48, 27.13, false, 59, 12, 5, 24.72, 9.04, 20.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 2, 'AXM478', 26.47, 8.38, 27.54, false, 140, 20, 21, 20.50, 8.24, 9.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 6, 'AXM478', 29.85, 8.21, 26.10, false, 130, 20, 10, 20.81, 8.90, 15.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 10, 'AXM478', 25.37, 8.04, 27.21, false, 122, 20, 7, 21.02, 8.49, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 14, 'AXM478', 28.40, 8.39, 26.17, false, 143, 20, 22, 15.75, 8.05, 12.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 18, 'AXM478', 29.82, 7.99, 26.37, false, 103, 18, 12, 19.33, 8.10, 13.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 8, 'AXM480', 31.06, 7.30, 26.51, false, 105, 17, 8, 20.32, 8.46, 18.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 12, 'AXM480', 28.47, 7.64, 27.00, false, 67, 10, 12, 16.87, 8.54, 15.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 16, 'AXM480', 27.68, 8.71, 26.40, false, 139, 20, 5, 17.23, 8.81, 13.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 20, 'AXM480', 27.95, 7.25, 26.01, false, 61, 10, 13, 24.03, 8.08, 8.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 4, 'AXM480', 26.54, 7.74, 26.67, false, 124, 20, 13, 21.97, 7.83, 12.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 8, 'AXM480', 26.47, 8.92, 26.36, false, 103, 20, 19, 21.52, 8.83, 21.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 12, 'AXM480', 29.21, 7.80, 26.51, false, 87, 14, 6, 21.99, 8.05, 12.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 16, 'AXM480', 25.47, 8.72, 26.45, false, 76, 14, 15, 20.75, 7.91, 8.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 20, 'AXM480', 26.96, 7.44, 26.12, false, 126, 20, 11, 25.56, 8.57, 19.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 4, 'AXM480', 28.51, 7.25, 26.55, false, 57, 11, 8, 25.15, 8.21, 15.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 8, 'AXM480', 28.81, 8.72, 27.13, false, 105, 20, 5, 14.72, 9.09, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 12, 'AXM480', 26.63, 8.83, 27.39, false, 58, 12, 9, 18.97, 8.66, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 16, 'AXM480', 30.32, 7.89, 27.14, false, 116, 20, 24, 23.41, 8.50, 12.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 20, 'AXM480', 26.33, 8.01, 27.32, false, 63, 12, 10, 26.13, 7.91, 17.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 3, 'AXM479', 32.91, 0.50, 22.42, false, 112, 19, 15, 13.80, 8.66, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 7, 'AXM479', 28.62, 0.49, 22.45, false, 107, 19, 7, 22.80, 9.02, 10.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 11, 'AXM479', 28.55, 0.50, 22.32, false, 110, 18, 12, 17.65, 8.28, 10.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 15, 'AXM479', 29.59, 0.52, 22.03, false, 51, 10, 4, 15.53, 8.47, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 19, 'AXM479', 29.07, 0.51, 22.44, false, 143, 20, 6, 24.38, 7.90, 24.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 3, 'AXM479', 26.45, 0.51, 22.17, false, 124, 20, 24, 24.89, 9.02, 14.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 7, 'AXM479', 31.65, 0.48, 22.23, false, 128, 20, 21, 14.67, 8.62, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 11, 'AXM479', 30.42, 0.47, 22.30, false, 51, 10, 5, 18.56, 8.57, 12.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 15, 'AXM479', 31.81, 0.50, 22.21, false, 136, 20, 7, 17.85, 8.95, 10.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 19, 'AXM479', 31.09, 0.49, 22.45, false, 70, 12, 9, 17.01, 8.31, 14.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 3, 'AXM479', 30.07, 0.48, 22.05, false, 117, 20, 17, 26.26, 8.40, 8.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 7, 'AXM479', 30.62, 0.51, 22.50, false, 121, 20, 18, 15.67, 8.89, 14.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 2, 'AXM478', 32.57, 0.53, 22.28, false, 55, 11, 12, 25.32, 9.00, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 6, 'AXM478', 30.80, 0.49, 22.21, false, 109, 19, 21, 14.24, 8.00, 9.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 10, 'AXM478', 25.75, 0.52, 22.52, false, 71, 12, 10, 24.77, 8.55, 9.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 14, 'AXM478', 27.97, 0.50, 22.02, false, 83, 13, 11, 19.37, 8.86, 18.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 18, 'AXM478', 27.80, 0.49, 22.01, false, 123, 20, 21, 19.83, 7.91, 10.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 2, 'AXM478', 27.80, 0.50, 22.04, false, 47, 10, 7, 16.24, 8.44, 10.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 6, 'AXM478', 27.86, 0.50, 22.23, false, 118, 20, 19, 14.16, 8.62, 13.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 10, 'AXM478', 30.46, 0.51, 22.40, false, 116, 20, 19, 21.72, 8.78, 14.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 14, 'AXM478', 30.98, 0.48, 22.06, false, 120, 20, 4, 17.41, 8.76, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 18, 'AXM478', 30.10, 0.52, 22.53, false, 60, 12, 5, 24.72, 9.12, 20.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 2, 'AXM478', 26.49, 0.52, 22.21, false, 141, 20, 22, 20.68, 8.61, 9.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 6, 'AXM478', 32.92, 0.49, 22.02, false, 132, 20, 10, 20.95, 8.97, 15.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 4, 'AXM480', 29.03, 0.50, 22.47, false, 69, 11, 6, 22.85, 9.10, 16.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 8, 'AXM480', 33.21, 0.49, 22.28, false, 107, 18, 9, 20.36, 8.54, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 12, 'AXM480', 28.66, 0.49, 22.36, false, 68, 10, 12, 16.88, 8.90, 15.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 16, 'AXM480', 27.84, 0.50, 22.08, false, 140, 20, 5, 17.37, 8.95, 13.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 20, 'AXM480', 30.26, 0.51, 22.30, false, 63, 11, 14, 24.20, 8.37, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 4, 'AXM480', 29.68, 0.51, 22.11, false, 125, 20, 14, 22.02, 8.08, 12.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 8, 'AXM480', 27.36, 0.50, 22.41, false, 104, 20, 19, 21.70, 9.23, 21.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 12, 'AXM480', 30.25, 0.49, 22.01, false, 88, 14, 7, 22.17, 8.28, 12.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 16, 'AXM480', 27.89, 0.50, 22.12, false, 76, 15, 15, 20.88, 8.29, 8.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 20, 'AXM480', 30.91, 0.48, 22.29, false, 127, 20, 12, 25.69, 8.93, 19.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 4, 'AXM480', 31.34, 0.51, 22.07, false, 59, 12, 8, 25.23, 8.37, 15.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 11, 'AXM479', 30.63, 0.50, 22.29, false, 64, 12, 4, 15.16, 8.39, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 15, 'AXM479', 32.03, 0.53, 22.32, false, 59, 12, 9, 23.21, 8.38, 20.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 19, 'AXM479', 33.11, 0.49, 22.36, false, 104, 17, 12, 24.60, 8.57, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 3, 'AXM479', 23.58, 0.98, 20.44, false, 139, 14, 23, 17.90, 11.63, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 7, 'AXM479', 23.61, 1.03, 21.18, false, 182, 20, 34, 20.02, 12.27, 17.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 11, 'AXM479', 23.65, 0.99, 21.92, false, 138, 17, 27, 20.91, 12.40, 19.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 15, 'AXM479', 24.37, 1.01, 20.02, false, 145, 15, 4, 21.71, 11.85, 12.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 19, 'AXM479', 23.93, 0.97, 21.30, false, 176, 20, 6, 21.86, 12.33, 16.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 12, 'AXM480', 30.41, 0.51, 22.30, false, 59, 12, 9, 18.98, 8.80, 14.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 14, 'AXM478', 31.08, 0.52, 22.07, false, 144, 20, 23, 15.78, 8.40, 12.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 18, 'AXM478', 31.67, 0.51, 22.45, false, 105, 18, 12, 19.35, 8.28, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 2, 'AXM478', 24.16, 1.00, 20.32, false, 173, 20, 24, 19.28, 12.28, 16.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 6, 'AXM478', 24.45, 0.99, 21.36, false, 100, 11, 9, 21.83, 11.89, 18.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 10, 'AXM478', 24.19, 1.02, 20.08, false, 191, 20, 33, 18.49, 12.40, 14.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 14, 'AXM478', 23.85, 0.98, 21.49, false, 105, 11, 16, 28.24, 12.15, 25.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 18, 'AXM478', 24.26, 1.00, 20.38, false, 197, 20, 4, 18.35, 12.28, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 2, 'AXM478', 23.69, 1.01, 21.40, false, 175, 20, 36, 23.05, 12.46, 12.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 16, 'AXM480', 33.35, 0.49, 22.12, false, 116, 20, 25, 23.57, 8.51, 12.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 20, 'AXM480', 26.46, 0.51, 22.39, false, 65, 13, 11, 26.32, 7.94, 17.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 4, 'AXM480', 24.43, 0.98, 21.34, false, 187, 19, 4, 29.75, 12.33, 14.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 8, 'AXM480', 24.43, 1.03, 22.08, false, 164, 20, 5, 23.56, 12.06, 20.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 12, 'AXM480', 23.97, 1.02, 20.89, false, 170, 20, 9, 25.93, 11.85, 18.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 16, 'AXM480', 24.33, 0.99, 21.38, false, 177, 20, 16, 20.43, 11.84, 12.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 20, 'AXM480', 23.72, 1.02, 20.08, false, 160, 19, 3, 29.95, 12.38, 29.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 4, 'AXM480', 24.34, 0.99, 21.91, false, 191, 20, 5, 22.84, 12.18, 18.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 3, 'AXM479', 23.69, 1.03, 20.16, false, 170, 20, 34, 19.69, 12.06, 12.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 7, 'AXM479', 24.20, 1.03, 20.30, false, 199, 20, 9, 19.93, 12.33, 15.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 11, 'AXM479', 23.88, 0.98, 21.48, false, 198, 20, 28, 22.09, 12.33, 16.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 15, 'AXM479', 23.78, 0.98, 21.14, false, 107, 11, 14, 20.69, 11.84, 12.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 19, 'AXM479', 23.78, 0.99, 21.09, false, 126, 13, 19, 24.33, 11.61, 21.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 3, 'AXM479', 24.39, 1.00, 20.37, false, 181, 20, 10, 28.26, 11.68, 20.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 7, 'AXM479', 23.68, 1.00, 21.46, false, 178, 20, 28, 27.69, 12.31, 27.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 11, 'AXM479', 23.57, 0.99, 21.23, false, 165, 20, 32, 19.68, 12.22, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 15, 'AXM479', 24.02, 0.99, 20.72, false, 154, 16, 14, 18.83, 11.81, 16.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 19, 'AXM479', 24.08, 0.98, 21.42, false, 165, 20, 20, 26.53, 12.36, 24.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 8, 'AXM480', 24.05, 0.98, 20.90, false, 80, 10, 11, 28.27, 11.80, 27.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 6, 'AXM478', 24.22, 0.99, 20.15, false, 147, 17, 18, 19.73, 11.95, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 10, 'AXM478', 24.12, 1.00, 20.56, false, 174, 19, 29, 27.37, 12.33, 13.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 14, 'AXM478', 23.74, 1.03, 22.01, false, 152, 17, 19, 24.95, 11.66, 14.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 18, 'AXM478', 24.26, 1.01, 21.81, false, 169, 18, 6, 17.68, 12.18, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 2, 'AXM478', 23.58, 1.02, 22.07, false, 141, 16, 16, 28.74, 11.71, 16.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 6, 'AXM478', 23.66, 0.99, 21.04, false, 169, 20, 30, 23.95, 12.20, 12.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 10, 'AXM478', 23.91, 0.99, 20.81, false, 171, 20, 19, 17.22, 11.92, 14.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 14, 'AXM478', 23.97, 1.03, 20.97, false, 168, 20, 22, 22.91, 11.71, 12.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 18, 'AXM478', 23.56, 1.03, 21.76, false, 184, 20, 32, 28.85, 11.89, 16.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 12, 'AXM480', 23.76, 1.02, 21.21, false, 95, 10, 19, 19.50, 11.72, 16.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 16, 'AXM480', 24.10, 0.99, 20.39, false, 178, 20, 6, 19.10, 11.88, 15.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 20, 'AXM480', 23.53, 1.00, 20.57, false, 179, 20, 37, 20.54, 11.88, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 4, 'AXM480', 24.20, 0.99, 21.32, false, 189, 20, 10, 18.38, 11.57, 15.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 8, 'AXM480', 23.86, 0.99, 21.19, false, 103, 12, 22, 26.15, 12.11, 23.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 12, 'AXM480', 24.00, 1.00, 21.65, false, 198, 20, 22, 20.94, 12.06, 19.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 16, 'AXM480', 23.76, 1.02, 20.05, false, 195, 20, 5, 28.01, 12.46, 13.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 20, 'AXM480', 24.16, 0.97, 20.47, false, 164, 20, 13, 21.08, 12.21, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 3, 'AXM479', 24.66, 10.00, 24.21, false, 141, 14, 24, 18.10, 11.86, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 7, 'AXM479', 26.02, 9.72, 24.78, false, 183, 20, 34, 20.10, 12.40, 17.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 11, 'AXM479', 26.57, 10.49, 25.02, false, 138, 18, 28, 21.01, 12.64, 19.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 15, 'AXM479', 26.22, 9.96, 24.51, false, 146, 15, 4, 21.79, 12.24, 12.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 19, 'AXM479', 23.93, 9.53, 24.62, false, 178, 20, 7, 21.98, 12.42, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 3, 'AXM479', 24.38, 9.93, 25.52, false, 171, 20, 35, 19.72, 12.07, 12.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 7, 'AXM479', 26.54, 10.10, 25.25, false, 199, 20, 10, 20.04, 12.61, 15.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 11, 'AXM479', 26.07, 9.51, 24.20, false, 198, 20, 28, 22.28, 12.36, 16.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 15, 'AXM479', 25.41, 10.22, 24.98, false, 107, 11, 14, 20.70, 12.04, 12.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 19, 'AXM479', 26.20, 10.35, 24.04, false, 128, 13, 20, 24.37, 11.66, 21.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 3, 'AXM479', 24.57, 10.14, 24.60, false, 183, 20, 11, 28.31, 12.03, 20.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 7, 'AXM479', 27.22, 9.82, 24.20, false, 180, 20, 29, 27.88, 12.45, 27.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 11, 'AXM479', 25.92, 9.88, 24.81, false, 165, 20, 33, 19.78, 12.26, 16.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 15, 'AXM479', 26.26, 9.83, 25.81, false, 155, 16, 15, 18.89, 12.14, 16.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 19, 'AXM479', 27.85, 10.32, 25.43, false, 166, 20, 20, 26.57, 12.68, 24.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 4, 'AXM480', 26.21, 9.63, 24.04, false, 187, 20, 4, 29.77, 12.38, 14.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 2, 'AXM478', 25.08, 10.12, 24.31, false, 175, 20, 25, 19.29, 12.48, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 6, 'AXM478', 26.00, 10.41, 25.84, false, 101, 12, 9, 21.96, 11.92, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 10, 'AXM478', 24.64, 9.95, 24.31, false, 192, 20, 34, 18.66, 12.46, 14.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 14, 'AXM478', 26.68, 10.23, 24.69, false, 105, 12, 16, 28.27, 12.52, 25.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 18, 'AXM478', 27.96, 10.21, 25.64, false, 198, 20, 5, 18.44, 12.54, 14.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 2, 'AXM478', 25.27, 10.49, 24.57, false, 175, 20, 37, 23.24, 12.57, 12.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 6, 'AXM478', 24.64, 9.89, 25.49, false, 148, 17, 18, 19.93, 12.07, 15.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 10, 'AXM478', 26.99, 9.94, 24.69, false, 176, 19, 30, 27.44, 12.54, 13.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 14, 'AXM478', 25.50, 10.23, 25.48, false, 154, 18, 19, 25.07, 11.86, 14.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 18, 'AXM478', 24.57, 9.64, 25.25, false, 170, 18, 7, 17.69, 12.20, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 2, 'AXM478', 25.74, 9.69, 25.70, false, 143, 17, 16, 28.84, 11.72, 16.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 6, 'AXM478', 26.74, 10.24, 25.72, false, 170, 20, 31, 23.97, 12.24, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 10, 'AXM478', 25.99, 9.81, 25.71, false, 172, 20, 19, 17.35, 12.16, 14.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 14, 'AXM478', 27.42, 10.28, 24.83, false, 169, 20, 23, 23.07, 11.91, 12.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 18, 'AXM478', 25.47, 9.88, 24.46, false, 186, 20, 33, 28.95, 11.91, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 8, 'AXM480', 28.38, 10.45, 25.16, false, 166, 20, 5, 23.63, 12.45, 20.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 12, 'AXM480', 26.93, 10.27, 25.76, false, 172, 20, 10, 26.12, 12.01, 18.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 16, 'AXM480', 24.64, 10.48, 25.35, false, 178, 20, 17, 20.55, 12.00, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 20, 'AXM480', 25.77, 9.50, 24.51, false, 162, 20, 4, 30.02, 12.40, 29.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 4, 'AXM480', 26.63, 9.67, 24.70, false, 191, 20, 6, 22.95, 12.55, 19.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 8, 'AXM480', 26.54, 10.27, 25.84, false, 80, 10, 12, 28.36, 12.09, 27.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 12, 'AXM480', 23.78, 10.16, 24.06, false, 95, 10, 20, 19.59, 11.87, 16.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 16, 'AXM480', 26.46, 9.96, 25.18, false, 178, 20, 7, 19.17, 11.89, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 20, 'AXM480', 26.92, 9.58, 25.05, false, 181, 20, 37, 20.66, 12.25, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 4, 'AXM480', 26.86, 9.79, 24.81, false, 190, 20, 10, 18.54, 11.82, 15.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 8, 'AXM480', 24.75, 9.82, 25.15, false, 104, 12, 22, 26.31, 12.42, 23.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 12, 'AXM480', 25.28, 9.59, 25.06, false, 200, 20, 23, 21.08, 12.09, 19.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 16, 'AXM480', 26.76, 9.57, 24.11, false, 195, 20, 5, 28.02, 12.85, 13.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 20, 'AXM480', 24.62, 10.12, 25.01, false, 164, 20, 14, 21.26, 12.44, 15.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 3, 'AXM479', 26.44, 7.05, 26.13, false, 141, 15, 24, 18.14, 12.20, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 7, 'AXM479', 28.42, 8.83, 26.99, false, 185, 20, 35, 20.18, 12.49, 17.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 11, 'AXM479', 30.54, 7.58, 27.10, false, 139, 19, 28, 21.07, 12.76, 19.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 15, 'AXM479', 26.46, 7.99, 26.11, false, 146, 15, 4, 21.81, 12.48, 12.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 19, 'AXM479', 24.74, 7.20, 26.11, false, 178, 20, 7, 22.11, 12.79, 16.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 3, 'AXM479', 28.14, 7.71, 26.35, false, 172, 20, 36, 19.85, 12.23, 12.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 7, 'AXM479', 29.47, 7.54, 26.90, false, 199, 20, 11, 20.20, 12.89, 16.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 11, 'AXM479', 28.35, 8.35, 26.07, false, 200, 20, 28, 22.42, 12.65, 16.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 15, 'AXM479', 26.29, 8.51, 26.66, false, 109, 12, 14, 20.83, 12.34, 12.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 19, 'AXM479', 30.20, 8.54, 27.48, false, 130, 13, 20, 24.55, 11.75, 22.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 3, 'AXM479', 28.34, 7.68, 26.60, false, 184, 20, 12, 28.41, 12.14, 20.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 7, 'AXM479', 29.92, 8.57, 26.35, false, 181, 20, 29, 27.98, 12.82, 27.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 2, 'AXM478', 28.24, 8.97, 27.51, false, 177, 20, 25, 19.45, 12.65, 16.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 6, 'AXM478', 28.44, 8.94, 27.68, false, 102, 12, 9, 22.14, 12.09, 18.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 10, 'AXM478', 25.96, 7.45, 27.06, false, 194, 20, 34, 18.68, 12.60, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 14, 'AXM478', 28.99, 8.93, 26.68, false, 105, 12, 16, 28.32, 12.56, 25.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 18, 'AXM478', 28.39, 7.30, 26.22, false, 198, 20, 5, 18.44, 12.64, 15.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 2, 'AXM478', 28.96, 8.04, 27.01, false, 175, 20, 37, 23.43, 12.69, 12.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 6, 'AXM478', 25.12, 7.39, 26.14, false, 150, 18, 18, 19.96, 12.25, 15.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 10, 'AXM478', 30.26, 7.49, 26.74, false, 177, 20, 30, 27.64, 12.84, 13.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 14, 'AXM478', 26.79, 7.43, 26.98, false, 156, 19, 19, 25.24, 12.12, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 18, 'AXM478', 27.85, 7.63, 27.27, false, 171, 19, 8, 17.72, 12.23, 14.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 2, 'AXM478', 27.03, 7.67, 27.26, false, 143, 18, 16, 28.96, 12.02, 16.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 6, 'AXM478', 29.12, 8.70, 26.23, false, 171, 20, 31, 23.97, 12.48, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 4, 'AXM480', 27.40, 8.97, 26.35, false, 189, 20, 4, 29.94, 12.60, 15.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 8, 'AXM480', 28.59, 7.55, 26.84, false, 168, 20, 6, 23.82, 12.51, 20.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 12, 'AXM480', 29.73, 7.95, 27.13, false, 174, 20, 10, 26.20, 12.15, 19.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 16, 'AXM480', 27.10, 8.05, 26.81, false, 178, 20, 17, 20.75, 12.16, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 20, 'AXM480', 25.95, 8.04, 26.75, false, 163, 20, 5, 30.19, 12.65, 29.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 4, 'AXM480', 28.87, 7.36, 26.16, false, 191, 20, 7, 23.06, 12.73, 19.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 8, 'AXM480', 30.31, 7.13, 26.21, false, 81, 10, 13, 28.56, 12.10, 27.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 12, 'AXM480', 24.18, 8.69, 27.61, false, 95, 10, 21, 19.62, 12.25, 16.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 16, 'AXM480', 27.15, 8.38, 26.19, false, 180, 20, 7, 19.28, 11.94, 15.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 20, 'AXM480', 28.46, 7.68, 27.19, false, 181, 20, 38, 20.78, 12.55, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 4, 'AXM480', 30.00, 7.24, 26.59, false, 192, 20, 11, 18.61, 11.90, 15.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 11, 'AXM479', 26.08, 7.10, 26.51, false, 165, 20, 33, 19.90, 12.34, 16.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 15, 'AXM479', 26.87, 8.95, 26.75, false, 157, 16, 15, 18.93, 12.35, 16.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 19, 'AXM479', 30.61, 8.63, 27.53, false, 167, 20, 20, 26.73, 12.90, 24.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 3, 'AXM479', 29.07, 0.52, 22.04, false, 141, 15, 25, 18.20, 12.54, 15.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 7, 'AXM479', 31.15, 0.51, 22.38, false, 187, 20, 35, 20.19, 12.86, 17.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 11, 'AXM479', 31.95, 0.51, 22.25, false, 141, 20, 29, 21.19, 12.96, 19.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 15, 'AXM479', 28.74, 0.49, 22.41, false, 148, 16, 5, 21.82, 12.56, 12.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 19, 'AXM479', 26.68, 0.52, 22.47, false, 178, 20, 8, 22.21, 13.11, 16.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 12, 'AXM480', 25.99, 8.64, 26.11, false, 201, 20, 23, 21.20, 12.22, 19.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 14, 'AXM478', 28.00, 7.41, 27.01, false, 169, 20, 24, 23.17, 12.07, 12.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 18, 'AXM478', 26.89, 8.13, 26.44, false, 187, 20, 33, 28.95, 12.26, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 2, 'AXM478', 31.32, 0.48, 22.42, false, 178, 20, 26, 19.57, 12.70, 16.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 6, 'AXM478', 31.33, 0.50, 22.10, false, 102, 12, 9, 22.32, 12.36, 19.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 10, 'AXM478', 27.36, 0.48, 22.21, false, 194, 20, 35, 18.77, 12.68, 14.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 14, 'AXM478', 31.31, 0.50, 22.32, false, 107, 12, 16, 28.51, 12.85, 25.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 18, 'AXM478', 29.15, 0.48, 22.44, false, 198, 20, 6, 18.49, 12.73, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 2, 'AXM478', 29.20, 0.51, 22.38, false, 175, 20, 37, 23.47, 12.96, 13.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 16, 'AXM480', 29.19, 8.00, 27.29, false, 197, 20, 6, 28.17, 13.04, 13.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 20, 'AXM480', 26.84, 8.08, 27.18, false, 165, 20, 15, 21.31, 12.58, 15.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 4, 'AXM480', 28.16, 0.49, 22.01, false, 189, 20, 5, 30.10, 12.90, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 8, 'AXM480', 30.94, 0.53, 22.13, false, 168, 20, 7, 23.88, 12.56, 20.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 12, 'AXM480', 30.30, 0.51, 22.46, false, 174, 20, 10, 26.37, 12.34, 19.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 16, 'AXM480', 30.75, 0.47, 22.05, false, 179, 20, 17, 20.75, 12.25, 12.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 20, 'AXM480', 29.80, 0.49, 22.34, false, 163, 20, 5, 30.38, 12.84, 29.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 4, 'AXM480', 31.49, 0.49, 22.26, false, 191, 20, 8, 23.20, 12.76, 19.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 3, 'AXM479', 30.47, 0.50, 22.28, false, 174, 20, 36, 19.89, 12.57, 12.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 7, 'AXM479', 33.07, 0.50, 22.47, false, 199, 20, 12, 20.33, 12.89, 16.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 11, 'AXM479', 30.76, 0.48, 22.18, false, 202, 20, 28, 22.60, 12.90, 16.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 15, 'AXM479', 27.56, 0.48, 22.02, false, 109, 12, 15, 20.97, 12.67, 12.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 19, 'AXM479', 30.39, 0.53, 22.54, false, 130, 14, 21, 24.56, 12.04, 22.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 3, 'AXM479', 29.36, 0.49, 22.25, false, 184, 20, 13, 28.52, 12.25, 20.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 7, 'AXM479', 30.62, 0.50, 22.14, false, 183, 20, 29, 28.03, 13.04, 27.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 11, 'AXM479', 26.89, 0.50, 22.30, false, 165, 20, 34, 20.00, 12.42, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 15, 'AXM479', 28.05, 0.52, 22.04, false, 157, 17, 15, 19.12, 12.41, 16.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 19, 'AXM479', 34.27, 0.47, 22.44, false, 167, 20, 20, 26.77, 13.22, 24.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 8, 'AXM480', 32.00, 0.48, 22.30, false, 81, 11, 13, 28.76, 12.34, 27.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 6, 'AXM478', 27.72, 0.48, 22.45, false, 152, 19, 19, 20.01, 12.49, 15.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 10, 'AXM478', 31.52, 0.52, 22.02, false, 179, 20, 31, 27.69, 12.95, 13.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 14, 'AXM478', 29.39, 0.53, 22.47, false, 157, 20, 19, 25.36, 12.52, 14.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 18, 'AXM478', 31.18, 0.53, 22.49, false, 172, 19, 9, 17.75, 12.43, 14.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 2, 'AXM478', 27.33, 0.52, 22.44, false, 144, 19, 17, 29.00, 12.10, 16.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 6, 'AXM478', 29.81, 0.52, 22.21, false, 172, 20, 31, 24.05, 12.58, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 10, 'AXM478', 30.43, 0.53, 22.39, false, 175, 20, 21, 17.57, 12.61, 15.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 14, 'AXM478', 31.66, 0.52, 22.33, false, 170, 20, 25, 23.33, 12.45, 12.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 18, 'AXM478', 28.78, 0.51, 22.45, false, 187, 20, 34, 29.01, 12.54, 16.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 12, 'AXM480', 27.90, 0.52, 22.03, false, 96, 10, 22, 19.66, 12.54, 16.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 16, 'AXM480', 30.32, 0.47, 22.25, false, 181, 20, 7, 19.43, 11.94, 15.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 20, 'AXM480', 29.16, 0.49, 22.03, false, 183, 20, 39, 20.93, 12.91, 14.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 4, 'AXM480', 30.82, 0.49, 22.16, false, 194, 20, 11, 18.75, 12.26, 15.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 8, 'AXM480', 28.58, 0.52, 22.36, false, 107, 14, 23, 26.53, 12.90, 23.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 12, 'AXM480', 29.57, 0.52, 22.29, false, 202, 20, 23, 21.21, 12.54, 19.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 16, 'AXM480', 31.78, 0.49, 22.21, false, 197, 20, 7, 28.27, 13.05, 13.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 20, 'AXM480', 27.35, 0.50, 22.07, false, 165, 20, 15, 21.33, 12.59, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 3, 'AXM479', 23.91, 0.99, 20.34, false, 159, 14, 32, 31.63, 15.75, 30.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 7, 'AXM479', 23.80, 0.99, 21.89, false, 241, 20, 49, 31.57, 16.46, 21.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 11, 'AXM479', 24.29, 1.01, 20.19, false, 211, 17, 31, 31.37, 15.50, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 15, 'AXM479', 23.81, 1.02, 21.96, false, 181, 15, 25, 31.66, 16.32, 28.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 19, 'AXM479', 24.17, 0.98, 21.53, false, 232, 20, 42, 23.42, 16.22, 21.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 3, 'AXM479', 23.76, 1.00, 21.79, false, 237, 20, 18, 24.29, 15.94, 18.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 7, 'AXM479', 24.48, 1.01, 21.78, false, 238, 20, 34, 31.02, 16.26, 17.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 11, 'AXM479', 24.36, 1.00, 21.01, false, 260, 20, 9, 28.98, 15.75, 17.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 15, 'AXM479', 24.45, 1.00, 20.99, false, 128, 11, 22, 23.51, 15.80, 18.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 19, 'AXM479', 24.27, 1.01, 21.31, false, 164, 13, 8, 30.38, 15.80, 20.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 3, 'AXM479', 24.40, 1.02, 20.15, false, 252, 20, 18, 31.79, 15.77, 20.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 7, 'AXM479', 24.27, 1.03, 21.97, false, 239, 20, 29, 28.18, 15.57, 25.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 11, 'AXM479', 24.13, 0.97, 20.22, false, 235, 20, 9, 23.31, 16.07, 18.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 15, 'AXM479', 24.02, 0.98, 21.11, false, 194, 16, 12, 31.69, 15.63, 27.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 19, 'AXM479', 24.44, 0.99, 20.18, false, 231, 20, 31, 27.14, 15.58, 20.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 4, 'AXM480', 23.62, 0.97, 20.63, false, 216, 19, 19, 27.41, 15.90, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 2, 'AXM478', 24.47, 1.01, 20.74, false, 228, 20, 33, 30.24, 16.23, 27.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 6, 'AXM478', 24.00, 0.98, 21.66, false, 127, 11, 25, 29.63, 16.28, 25.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 10, 'AXM478', 23.60, 0.99, 21.84, false, 239, 20, 46, 24.26, 16.38, 22.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 14, 'AXM478', 24.27, 1.01, 21.25, false, 122, 11, 18, 29.58, 16.07, 26.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 18, 'AXM478', 23.59, 1.00, 21.46, false, 240, 20, 24, 29.17, 15.82, 16.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 2, 'AXM478', 23.53, 1.01, 21.40, false, 247, 20, 6, 31.63, 16.02, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 6, 'AXM478', 23.69, 1.03, 21.01, false, 203, 17, 37, 29.35, 16.35, 23.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 10, 'AXM478', 24.42, 0.98, 20.42, false, 223, 19, 37, 21.73, 16.06, 17.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 14, 'AXM478', 24.27, 0.99, 20.79, false, 195, 17, 29, 21.58, 15.79, 17.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 18, 'AXM478', 24.20, 1.01, 22.02, false, 229, 18, 8, 33.22, 15.56, 18.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 2, 'AXM478', 23.57, 0.99, 21.79, false, 195, 16, 35, 26.34, 15.71, 23.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 6, 'AXM478', 24.25, 0.99, 20.81, false, 251, 20, 42, 30.66, 16.02, 17.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 10, 'AXM478', 24.47, 1.00, 21.02, false, 245, 20, 46, 29.71, 15.75, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 14, 'AXM478', 23.80, 0.99, 21.28, false, 242, 20, 4, 23.43, 16.05, 23.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 18, 'AXM478', 24.33, 1.00, 21.87, false, 259, 20, 10, 32.31, 16.01, 19.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 8, 'AXM480', 24.18, 1.02, 20.17, false, 256, 20, 33, 26.10, 16.11, 16.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 12, 'AXM480', 24.22, 0.98, 21.10, false, 238, 20, 17, 32.31, 15.72, 21.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 16, 'AXM480', 24.31, 0.97, 20.70, false, 226, 20, 20, 21.90, 16.13, 17.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 20, 'AXM480', 24.33, 0.98, 20.31, false, 240, 19, 47, 28.11, 16.30, 21.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 4, 'AXM480', 23.84, 0.98, 20.92, false, 241, 20, 37, 23.91, 15.88, 23.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 8, 'AXM480', 24.27, 0.97, 20.43, false, 111, 10, 9, 30.47, 15.93, 23.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 12, 'AXM480', 23.81, 1.02, 20.18, false, 113, 10, 9, 23.75, 16.34, 17.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 16, 'AXM480', 23.87, 1.02, 20.05, false, 236, 20, 7, 32.15, 15.88, 16.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 20, 'AXM480', 24.35, 0.99, 20.23, false, 255, 20, 11, 27.42, 15.81, 17.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 4, 'AXM480', 24.14, 1.02, 20.80, false, 260, 20, 4, 27.41, 15.83, 24.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 8, 'AXM480', 23.98, 1.00, 20.88, false, 138, 12, 13, 26.54, 16.50, 22.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 12, 'AXM480', 23.87, 0.97, 20.65, false, 240, 20, 30, 21.47, 16.08, 19.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 16, 'AXM480', 23.57, 1.03, 22.06, false, 245, 20, 32, 28.99, 15.59, 26.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 20, 'AXM480', 23.92, 1.02, 20.94, false, 259, 20, 41, 32.31, 16.39, 24.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 3, 'AXM479', 27.43, 10.07, 25.32, false, 159, 14, 32, 31.80, 15.89, 30.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 7, 'AXM479', 26.74, 9.94, 24.14, false, 241, 20, 50, 31.70, 16.59, 21.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 11, 'AXM479', 27.51, 10.27, 24.24, false, 213, 18, 32, 31.56, 15.69, 18.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 15, 'AXM479', 26.24, 10.17, 24.74, false, 182, 15, 26, 31.77, 16.39, 28.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 19, 'AXM479', 24.88, 9.56, 24.39, false, 234, 20, 42, 23.46, 16.46, 21.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 3, 'AXM479', 27.65, 10.02, 24.38, false, 237, 20, 18, 24.36, 16.27, 18.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 7, 'AXM479', 25.37, 9.88, 25.05, false, 238, 20, 35, 31.14, 16.62, 17.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 11, 'AXM479', 26.58, 9.97, 25.78, false, 261, 20, 9, 29.05, 15.92, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 15, 'AXM479', 27.96, 9.88, 24.98, false, 128, 11, 23, 23.55, 15.96, 18.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 19, 'AXM479', 27.25, 9.63, 24.77, false, 164, 13, 8, 30.47, 16.04, 20.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 3, 'AXM479', 24.88, 10.25, 25.40, false, 252, 20, 18, 31.96, 15.91, 20.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 7, 'AXM479', 25.84, 9.59, 24.25, false, 241, 20, 30, 28.34, 15.82, 25.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 2, 'AXM478', 27.42, 9.58, 25.80, false, 230, 20, 34, 30.33, 16.57, 27.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 6, 'AXM478', 26.78, 9.64, 25.59, false, 128, 12, 25, 29.75, 16.60, 26.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 10, 'AXM478', 26.20, 9.53, 25.17, false, 240, 20, 46, 24.37, 16.53, 22.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 14, 'AXM478', 26.11, 10.20, 25.20, false, 124, 12, 19, 29.69, 16.32, 26.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 18, 'AXM478', 25.75, 9.96, 25.42, false, 242, 20, 25, 29.21, 16.03, 16.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 2, 'AXM478', 23.99, 9.79, 25.69, false, 248, 20, 6, 31.68, 16.11, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 6, 'AXM478', 25.25, 9.94, 24.82, false, 205, 17, 38, 29.53, 16.51, 23.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 10, 'AXM478', 26.18, 9.98, 24.62, false, 223, 19, 37, 21.79, 16.45, 17.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 14, 'AXM478', 26.66, 9.79, 25.45, false, 197, 18, 30, 21.69, 15.81, 17.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 18, 'AXM478', 25.13, 9.86, 25.79, false, 230, 18, 8, 33.30, 15.80, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 2, 'AXM478', 24.39, 10.15, 25.34, false, 195, 17, 36, 26.36, 15.97, 23.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 6, 'AXM478', 26.68, 9.83, 25.55, false, 252, 20, 43, 30.81, 16.26, 17.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 4, 'AXM480', 27.18, 10.17, 25.23, false, 216, 20, 19, 27.45, 15.99, 20.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 8, 'AXM480', 26.17, 9.65, 25.73, false, 258, 20, 33, 26.14, 16.29, 16.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 12, 'AXM480', 24.29, 9.98, 24.56, false, 239, 20, 18, 32.35, 15.80, 21.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 16, 'AXM480', 26.80, 10.36, 24.33, false, 226, 20, 20, 22.06, 16.35, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 20, 'AXM480', 27.22, 10.35, 25.66, false, 240, 20, 48, 28.31, 16.48, 21.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 4, 'AXM480', 27.84, 10.28, 25.12, false, 243, 20, 38, 24.09, 16.13, 23.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 8, 'AXM480', 26.66, 10.06, 25.48, false, 111, 10, 9, 30.60, 16.13, 23.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 12, 'AXM480', 26.45, 10.48, 25.09, false, 115, 10, 10, 23.93, 16.42, 17.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 16, 'AXM480', 25.54, 9.73, 25.74, false, 238, 20, 7, 32.21, 16.06, 16.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 20, 'AXM480', 25.25, 10.49, 24.14, false, 257, 20, 12, 27.43, 16.16, 17.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 4, 'AXM480', 25.93, 9.83, 24.93, false, 260, 20, 5, 27.52, 16.05, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 11, 'AXM479', 27.89, 9.79, 24.09, false, 236, 20, 10, 23.45, 16.13, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 15, 'AXM479', 24.60, 9.65, 24.11, false, 194, 16, 13, 31.71, 15.85, 27.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 19, 'AXM479', 27.37, 9.94, 24.51, false, 232, 20, 31, 27.19, 15.62, 21.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 3, 'AXM479', 27.50, 8.18, 26.32, false, 159, 15, 33, 31.83, 16.10, 30.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 7, 'AXM479', 27.67, 7.49, 26.94, false, 242, 20, 51, 31.78, 16.99, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 11, 'AXM479', 30.07, 8.04, 27.07, false, 215, 19, 32, 31.76, 15.72, 18.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 15, 'AXM479', 28.36, 7.93, 26.13, false, 183, 15, 26, 31.96, 16.57, 28.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 19, 'AXM479', 25.48, 7.85, 26.90, false, 234, 20, 42, 23.49, 16.56, 21.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 12, 'AXM480', 24.56, 9.87, 25.16, false, 240, 20, 31, 21.63, 16.09, 19.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 14, 'AXM478', 26.05, 9.99, 25.64, false, 242, 20, 4, 23.53, 16.35, 23.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 18, 'AXM478', 25.50, 9.52, 24.71, false, 261, 20, 11, 32.38, 16.26, 19.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 2, 'AXM478', 30.61, 8.98, 27.37, false, 231, 20, 35, 30.33, 16.83, 27.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 6, 'AXM478', 27.74, 7.21, 26.68, false, 130, 12, 25, 29.89, 16.93, 26.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 10, 'AXM478', 28.22, 7.59, 26.81, false, 241, 20, 47, 24.53, 16.64, 22.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 14, 'AXM478', 29.85, 7.56, 26.24, false, 124, 12, 20, 29.77, 16.55, 26.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 18, 'AXM478', 26.56, 8.53, 26.65, false, 242, 20, 26, 29.27, 16.23, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 2, 'AXM478', 27.45, 7.67, 26.30, false, 248, 20, 6, 31.70, 16.13, 18.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 16, 'AXM480', 25.35, 9.53, 24.88, false, 245, 20, 33, 29.05, 15.84, 26.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 20, 'AXM480', 25.30, 10.25, 24.96, false, 260, 20, 42, 32.42, 16.71, 24.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 4, 'AXM480', 28.55, 7.51, 27.16, false, 216, 20, 20, 27.56, 16.24, 20.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 8, 'AXM480', 27.73, 7.01, 26.57, false, 258, 20, 34, 26.24, 16.36, 16.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 12, 'AXM480', 28.16, 7.76, 27.14, false, 239, 20, 19, 32.52, 15.81, 21.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 16, 'AXM480', 28.83, 8.60, 27.52, false, 226, 20, 21, 22.24, 16.47, 17.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 20, 'AXM480', 29.72, 8.81, 27.34, false, 241, 20, 49, 28.35, 16.83, 21.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 4, 'AXM480', 29.92, 7.03, 26.99, false, 244, 20, 39, 24.15, 16.50, 23.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 3, 'AXM479', 31.41, 8.77, 26.83, false, 238, 20, 19, 24.40, 16.47, 18.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 7, 'AXM479', 28.53, 8.57, 26.65, false, 239, 20, 36, 31.27, 16.65, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 11, 'AXM479', 27.10, 8.95, 27.52, false, 261, 20, 9, 29.15, 15.96, 18.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 15, 'AXM479', 28.20, 7.06, 26.89, false, 128, 12, 24, 23.70, 16.18, 18.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 19, 'AXM479', 27.83, 8.12, 26.47, false, 165, 13, 8, 30.65, 16.33, 20.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 3, 'AXM479', 25.86, 8.15, 26.32, false, 252, 20, 18, 32.04, 16.28, 20.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 7, 'AXM479', 27.32, 7.03, 26.04, false, 242, 20, 31, 28.51, 15.94, 25.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 11, 'AXM479', 31.41, 8.46, 26.73, false, 238, 20, 11, 23.48, 16.49, 18.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 15, 'AXM479', 25.85, 8.13, 26.94, false, 196, 16, 14, 31.78, 15.90, 27.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 19, 'AXM479', 28.92, 7.79, 26.89, false, 233, 20, 31, 27.22, 15.86, 21.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 8, 'AXM480', 30.64, 7.21, 26.48, false, 113, 10, 10, 30.79, 16.34, 23.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 6, 'AXM478', 28.97, 8.56, 27.25, false, 207, 18, 38, 29.57, 16.61, 23.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 10, 'AXM478', 29.80, 8.16, 26.14, false, 225, 20, 38, 21.87, 16.79, 17.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 14, 'AXM478', 28.40, 7.85, 27.20, false, 199, 19, 30, 21.73, 16.19, 18.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 18, 'AXM478', 28.78, 7.29, 26.78, false, 231, 19, 8, 33.34, 15.83, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 2, 'AXM478', 28.09, 8.16, 26.72, false, 196, 18, 37, 26.49, 16.20, 23.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 6, 'AXM478', 27.75, 8.42, 26.74, false, 254, 20, 43, 30.85, 16.31, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 10, 'AXM478', 28.60, 8.95, 27.22, false, 247, 20, 48, 29.96, 16.27, 22.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 14, 'AXM478', 26.32, 7.53, 27.04, false, 242, 20, 4, 23.54, 16.71, 23.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 18, 'AXM478', 27.22, 8.92, 26.46, false, 262, 20, 11, 32.49, 16.47, 19.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 12, 'AXM480', 29.98, 8.10, 26.27, false, 117, 10, 11, 24.06, 16.79, 17.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 16, 'AXM480', 26.42, 8.25, 26.35, false, 238, 20, 8, 32.31, 16.24, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 20, 'AXM480', 26.78, 8.46, 26.72, false, 257, 20, 12, 27.61, 16.51, 17.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 4, 'AXM480', 27.56, 7.11, 26.09, false, 261, 20, 6, 27.55, 16.37, 24.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 8, 'AXM480', 27.67, 8.01, 27.24, false, 142, 13, 15, 26.77, 16.92, 22.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 12, 'AXM480', 26.11, 7.20, 26.37, false, 240, 20, 32, 21.83, 16.38, 19.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 16, 'AXM480', 27.40, 7.95, 26.80, false, 247, 20, 33, 29.10, 15.90, 26.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 20, 'AXM480', 25.83, 8.23, 26.66, false, 262, 20, 43, 32.57, 16.97, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 3, 'AXM479', 29.87, 0.49, 22.18, false, 160, 15, 33, 31.93, 16.12, 30.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 7, 'AXM479', 27.98, 0.50, 22.03, false, 243, 20, 51, 31.84, 17.17, 22.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 11, 'AXM479', 31.12, 0.52, 22.44, false, 215, 20, 32, 31.80, 15.93, 18.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 15, 'AXM479', 29.48, 0.49, 22.24, false, 183, 16, 26, 31.96, 16.94, 28.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 19, 'AXM479', 28.11, 0.48, 22.30, false, 236, 20, 43, 23.58, 16.75, 21.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 3, 'AXM479', 32.67, 0.52, 22.50, false, 239, 20, 19, 24.42, 16.56, 18.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 7, 'AXM479', 31.87, 0.48, 22.36, false, 239, 20, 36, 31.41, 16.67, 18.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 11, 'AXM479', 30.34, 0.49, 22.16, false, 262, 20, 10, 29.27, 15.99, 18.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 15, 'AXM479', 28.76, 0.52, 22.52, false, 128, 12, 25, 23.82, 16.50, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 19, 'AXM479', 29.54, 0.49, 22.34, false, 165, 14, 9, 30.71, 16.50, 20.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 3, 'AXM479', 26.40, 0.53, 22.33, false, 253, 20, 19, 32.07, 16.32, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 7, 'AXM479', 27.48, 0.48, 22.38, false, 242, 20, 32, 28.52, 16.06, 25.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 11, 'AXM479', 35.37, 0.50, 22.34, false, 238, 20, 12, 23.50, 16.60, 18.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 15, 'AXM479', 28.15, 0.52, 22.39, false, 196, 17, 14, 31.93, 16.20, 27.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 19, 'AXM479', 29.79, 0.53, 22.35, false, 235, 20, 32, 27.39, 15.95, 21.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 4, 'AXM480', 32.31, 0.47, 22.35, false, 216, 20, 20, 27.64, 16.45, 20.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 2, 'AXM478', 31.00, 0.49, 22.35, false, 233, 20, 36, 30.35, 16.93, 27.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 6, 'AXM478', 30.48, 0.52, 22.16, false, 130, 12, 26, 30.01, 16.94, 26.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 10, 'AXM478', 28.63, 0.53, 22.44, false, 242, 20, 47, 24.57, 16.89, 22.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 14, 'AXM478', 33.42, 0.52, 22.32, false, 125, 12, 21, 29.77, 16.74, 26.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 18, 'AXM478', 26.63, 0.50, 22.43, false, 242, 20, 26, 29.38, 16.34, 16.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 2, 'AXM478', 31.20, 0.52, 22.50, false, 249, 20, 7, 31.85, 16.51, 18.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 6, 'AXM478', 31.02, 0.52, 22.04, false, 208, 19, 39, 29.58, 16.98, 23.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 10, 'AXM478', 31.72, 0.48, 22.00, false, 225, 20, 39, 21.98, 17.05, 17.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 14, 'AXM478', 30.44, 0.49, 22.25, false, 200, 20, 31, 21.87, 16.22, 18.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 18, 'AXM478', 32.53, 0.50, 22.39, false, 231, 19, 8, 33.39, 16.20, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 2, 'AXM478', 28.95, 0.47, 22.01, false, 197, 19, 38, 26.58, 16.24, 23.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 6, 'AXM478', 28.46, 0.47, 22.27, false, 256, 20, 44, 31.00, 16.32, 18.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 10, 'AXM478', 32.50, 0.50, 22.24, false, 247, 20, 49, 30.08, 16.28, 22.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 14, 'AXM478', 26.90, 0.50, 22.40, false, 244, 20, 4, 23.61, 16.95, 23.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 18, 'AXM478', 28.42, 0.51, 22.14, false, 264, 20, 12, 32.64, 16.73, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 8, 'AXM480', 28.54, 0.51, 22.11, false, 258, 20, 35, 26.35, 16.36, 16.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 12, 'AXM480', 31.96, 0.49, 22.04, false, 241, 20, 20, 32.66, 15.89, 21.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 16, 'AXM480', 29.33, 0.49, 22.01, false, 227, 20, 21, 22.25, 16.49, 17.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 20, 'AXM480', 30.62, 0.51, 22.02, false, 241, 20, 50, 28.45, 17.22, 21.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 4, 'AXM480', 31.90, 0.48, 22.22, false, 244, 20, 39, 24.30, 16.76, 23.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 8, 'AXM480', 31.28, 0.49, 22.36, false, 115, 11, 10, 30.91, 16.35, 23.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 12, 'AXM480', 31.04, 0.51, 22.25, false, 119, 10, 12, 24.15, 17.03, 17.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 16, 'AXM480', 27.79, 0.51, 22.36, false, 239, 20, 8, 32.37, 16.32, 16.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 20, 'AXM480', 27.84, 0.47, 22.10, false, 257, 20, 13, 27.80, 16.87, 17.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 4, 'AXM480', 29.38, 0.51, 22.40, false, 261, 20, 6, 27.59, 16.63, 24.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 8, 'AXM480', 30.66, 0.47, 22.40, false, 142, 14, 15, 26.87, 16.98, 22.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 12, 'AXM480', 26.13, 0.50, 22.30, false, 242, 20, 33, 21.93, 16.73, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 16, 'AXM480', 31.25, 0.50, 22.36, false, 247, 20, 33, 29.21, 16.13, 26.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 20, 'AXM480', 27.46, 0.52, 22.30, false, 263, 20, 44, 32.67, 17.18, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 1, 'AXM477', 24.19, 0.97, 21.14, false, 35, 5, 2, 8.70, 1.71, 3.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 5, 'AXM477', 24.41, 0.97, 20.80, false, 10, 16, 2, 16.32, 1.81, 3.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 9, 'AXM477', 23.93, 1.01, 20.62, false, 0, 0, 0, 17.84, 1.85, 15.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 13, 'AXM477', 24.28, 1.02, 20.73, false, 6, 11, 0, 16.89, 2.35, 4.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 17, 'AXM477', 24.34, 1.03, 20.09, false, 2, 3, 0, 17.56, 1.73, 14.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 1, 'AXM477', 24.50, 1.01, 20.53, false, 24, 9, 4, 8.70, 1.62, 6.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 5, 'AXM477', 23.95, 1.01, 21.19, false, 4, 15, 0, 9.79, 1.64, 5.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 9, 'AXM477', 23.50, 1.02, 21.51, false, 29, 19, 4, 8.04, 1.50, 2.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 13, 'AXM477', 23.98, 1.00, 21.14, false, 8, 5, 1, 11.28, 2.50, 8.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 17, 'AXM477', 24.22, 1.01, 20.87, false, 22, 14, 4, 12.65, 1.92, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 1, 'AXM477', 24.17, 1.01, 20.01, false, 22, 0, 3, 8.70, 1.55, 8.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 5, 'AXM477', 24.21, 0.99, 20.51, false, 2, 18, 0, 10.44, 1.57, 10.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 9, 'AXM477', 24.46, 0.98, 21.54, false, 5, 8, 0, 8.67, 1.74, 7.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 13, 'AXM477', 23.97, 0.98, 20.22, false, 5, 7, 0, 8.52, 2.27, 4.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 17, 'AXM477', 24.16, 1.00, 20.80, false, 0, 2, 0, 19.99, 1.65, 17.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 1, 'AXM477', 26.66, 9.82, 25.10, false, 37, 5, 2, 8.72, 1.74, 3.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 5, 'AXM477', 25.54, 9.67, 24.08, false, 12, 17, 2, 16.40, 1.95, 3.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 9, 'AXM477', 27.66, 10.03, 24.44, false, 1, 1, 1, 17.87, 2.04, 15.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 13, 'AXM477', 25.91, 9.68, 24.85, false, 7, 12, 0, 17.05, 2.53, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 17, 'AXM477', 27.54, 9.81, 25.40, false, 4, 3, 1, 17.60, 1.92, 14.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 1, 'AXM477', 27.08, 9.53, 25.34, false, 25, 10, 4, 8.74, 1.62, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 5, 'AXM477', 26.90, 10.17, 24.19, false, 6, 15, 1, 9.80, 1.97, 5.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 9, 'AXM477', 27.03, 9.89, 25.84, false, 31, 20, 5, 8.09, 1.79, 2.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 13, 'AXM477', 24.62, 9.65, 24.99, false, 10, 5, 1, 11.28, 2.63, 8.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 17, 'AXM477', 27.69, 10.49, 24.05, false, 22, 15, 5, 12.70, 2.29, 4.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 1, 'AXM477', 25.42, 9.57, 25.18, false, 22, 1, 4, 8.84, 1.89, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 5, 'AXM477', 25.84, 10.21, 24.70, false, 4, 18, 0, 10.50, 1.93, 10.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 9, 'AXM477', 24.97, 10.30, 25.72, false, 5, 8, 0, 8.87, 2.09, 7.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 13, 'AXM477', 24.05, 10.16, 25.51, false, 6, 7, 0, 8.53, 2.66, 4.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 17, 'AXM477', 25.59, 10.08, 25.65, false, 1, 2, 1, 20.12, 2.01, 17.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 1, 'AXM477', 28.08, 8.26, 26.03, false, 38, 6, 2, 8.77, 1.95, 3.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 5, 'AXM477', 26.29, 8.38, 26.91, false, 14, 18, 3, 16.42, 2.34, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 9, 'AXM477', 28.29, 7.91, 26.22, false, 1, 2, 2, 17.97, 2.27, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 13, 'AXM477', 27.18, 8.86, 26.41, false, 9, 12, 0, 17.20, 2.92, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 17, 'AXM477', 31.50, 8.25, 26.97, false, 4, 3, 2, 17.60, 2.22, 14.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 1, 'AXM477', 28.15, 7.22, 26.51, false, 27, 11, 4, 8.86, 1.63, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 5, 'AXM477', 29.99, 7.60, 26.59, false, 8, 15, 2, 9.81, 2.09, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 9, 'AXM477', 29.01, 8.76, 26.89, false, 31, 20, 5, 8.20, 1.83, 2.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 13, 'AXM477', 27.93, 7.05, 26.68, false, 12, 5, 1, 11.44, 2.66, 8.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 17, 'AXM477', 29.46, 7.06, 26.07, false, 24, 16, 5, 12.78, 2.52, 5.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 1, 'AXM477', 26.14, 7.76, 27.27, false, 24, 2, 5, 8.90, 2.29, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 5, 'AXM477', 27.89, 7.04, 26.22, false, 6, 19, 0, 10.62, 2.23, 10.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 9, 'AXM477', 27.60, 7.23, 26.83, false, 6, 9, 0, 8.92, 2.48, 7.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 13, 'AXM477', 27.15, 7.40, 26.70, false, 6, 8, 0, 8.65, 3.00, 4.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 17, 'AXM477', 28.61, 7.16, 26.37, false, 3, 2, 1, 20.14, 2.03, 17.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 1, 'AXM477', 28.70, 0.50, 22.24, false, 38, 7, 3, 8.79, 2.01, 3.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 5, 'AXM477', 26.39, 0.52, 22.03, false, 14, 19, 4, 16.46, 2.59, 3.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 9, 'AXM477', 29.61, 0.53, 22.33, false, 1, 3, 3, 17.97, 2.59, 15.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 13, 'AXM477', 29.61, 0.51, 22.20, false, 10, 13, 1, 17.26, 3.23, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 17, 'AXM477', 33.95, 0.53, 22.25, false, 4, 3, 3, 17.77, 2.54, 14.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 1, 'AXM477', 31.37, 0.49, 22.45, false, 27, 12, 4, 8.88, 1.97, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 5, 'AXM477', 31.01, 0.53, 22.24, false, 8, 16, 3, 9.98, 2.11, 5.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 9, 'AXM477', 30.76, 0.52, 22.18, false, 33, 20, 6, 8.30, 2.11, 2.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 13, 'AXM477', 28.85, 0.53, 22.16, false, 13, 5, 2, 11.45, 2.91, 8.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 17, 'AXM477', 31.64, 0.52, 22.42, false, 24, 17, 6, 12.95, 2.64, 5.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 1, 'AXM477', 26.52, 0.52, 22.46, false, 24, 3, 6, 9.06, 2.58, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 5, 'AXM477', 29.50, 0.52, 22.41, false, 7, 19, 0, 10.63, 2.50, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 9, 'AXM477', 28.50, 0.50, 22.46, false, 8, 10, 0, 9.10, 2.56, 7.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 13, 'AXM477', 28.08, 0.48, 22.12, false, 7, 9, 1, 8.67, 3.18, 4.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 17, 'AXM477', 30.56, 0.53, 22.26, false, 3, 2, 2, 20.27, 2.09, 17.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 1, 'AXM477', 24.31, 1.02, 21.43, false, 9, 17, 1, 8.70, 2.39, 8.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 5, 'AXM477', 23.91, 1.00, 20.82, false, 9, 6, 1, 18.39, 2.40, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 9, 'AXM477', 24.44, 1.03, 20.08, false, 10, 6, 1, 14.81, 2.26, 7.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 13, 'AXM477', 23.78, 0.99, 20.40, false, 2, 3, 0, 8.88, 1.55, 3.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 17, 'AXM477', 23.84, 0.98, 21.22, false, 4, 5, 0, 15.32, 2.35, 5.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 1, 'AXM477', 23.79, 0.99, 20.56, false, 41, 2, 3, 8.70, 2.15, 8.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 5, 'AXM477', 24.42, 1.00, 21.60, false, 7, 7, 1, 10.53, 1.92, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 9, 'AXM477', 23.95, 0.97, 21.82, false, 1, 1, 0, 17.01, 1.93, 13.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 13, 'AXM477', 24.01, 0.99, 21.18, false, 11, 12, 1, 13.93, 1.55, 11.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 17, 'AXM477', 23.79, 0.98, 21.48, false, 14, 15, 1, 12.47, 2.32, 4.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 1, 'AXM477', 23.76, 0.98, 21.47, false, 27, 20, 2, 8.70, 1.85, 8.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 5, 'AXM477', 24.39, 1.01, 21.92, false, 2, 13, 0, 19.59, 1.93, 17.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 9, 'AXM477', 24.42, 1.02, 21.60, false, 15, 14, 3, 19.82, 1.58, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 13, 'AXM477', 23.85, 1.02, 21.05, false, 8, 7, 0, 9.02, 2.25, 4.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 17, 'AXM477', 24.41, 1.01, 21.22, false, 13, 16, 1, 11.23, 2.38, 11.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 1, 'AXM477', 25.32, 9.64, 25.37, false, 11, 18, 2, 8.89, 2.53, 8.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 5, 'AXM477', 26.32, 10.05, 24.19, false, 10, 6, 1, 18.42, 2.42, 16.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 9, 'AXM477', 27.24, 10.38, 25.10, false, 10, 6, 2, 14.92, 2.57, 7.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 13, 'AXM477', 24.79, 10.18, 24.66, false, 2, 4, 1, 9.04, 1.93, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 17, 'AXM477', 27.11, 9.93, 24.11, false, 6, 5, 0, 15.36, 2.42, 5.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 1, 'AXM477', 26.99, 10.46, 25.03, false, 42, 2, 4, 8.70, 2.21, 8.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 5, 'AXM477', 24.49, 9.84, 25.39, false, 9, 8, 2, 10.57, 2.16, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 9, 'AXM477', 24.68, 9.89, 25.31, false, 1, 1, 0, 17.06, 1.99, 13.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 13, 'AXM477', 24.86, 10.26, 24.95, false, 13, 13, 1, 13.98, 1.66, 11.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 17, 'AXM477', 25.35, 10.15, 24.71, false, 16, 15, 1, 12.48, 2.64, 4.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 1, 'AXM477', 24.06, 9.74, 24.75, false, 29, 20, 2, 8.77, 2.20, 8.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 5, 'AXM477', 28.30, 10.31, 24.44, false, 2, 13, 0, 19.77, 2.28, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 9, 'AXM477', 28.19, 10.12, 24.32, false, 15, 15, 4, 19.93, 1.93, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 13, 'AXM477', 27.76, 10.36, 25.46, false, 10, 8, 0, 9.14, 2.65, 4.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 17, 'AXM477', 27.18, 10.18, 24.76, false, 14, 16, 1, 11.25, 2.65, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 1, 'AXM477', 28.10, 8.83, 26.45, false, 11, 19, 2, 8.95, 2.57, 8.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 5, 'AXM477', 30.16, 8.98, 26.51, false, 10, 7, 1, 18.57, 2.74, 16.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 9, 'AXM477', 27.94, 7.89, 27.07, false, 12, 7, 3, 14.95, 2.91, 7.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 13, 'AXM477', 25.62, 8.28, 27.05, false, 2, 4, 1, 9.13, 2.21, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 17, 'AXM477', 28.85, 8.87, 27.30, false, 8, 6, 1, 15.55, 2.63, 6.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 1, 'AXM477', 30.97, 8.40, 26.69, false, 42, 2, 4, 8.78, 2.41, 8.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 5, 'AXM477', 25.32, 7.57, 26.19, false, 9, 9, 3, 10.69, 2.35, 3.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 9, 'AXM477', 25.26, 7.88, 26.39, false, 2, 2, 1, 17.16, 2.12, 14.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 13, 'AXM477', 28.79, 8.60, 26.35, false, 13, 13, 2, 14.17, 1.71, 11.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 17, 'AXM477', 27.14, 7.03, 26.16, false, 18, 15, 2, 12.65, 2.72, 4.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 1, 'AXM477', 24.90, 8.68, 26.64, false, 30, 20, 3, 8.80, 2.39, 8.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 5, 'AXM477', 29.69, 7.37, 26.62, false, 3, 14, 0, 19.89, 2.56, 17.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 9, 'AXM477', 31.14, 8.86, 26.80, false, 17, 15, 5, 20.04, 2.01, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 13, 'AXM477', 31.37, 7.71, 27.22, false, 10, 8, 0, 9.21, 3.04, 4.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 17, 'AXM477', 30.21, 7.46, 26.75, false, 16, 16, 1, 11.41, 2.67, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 1, 'AXM477', 32.06, 0.51, 22.22, false, 11, 19, 3, 8.98, 2.61, 8.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 5, 'AXM477', 31.19, 0.50, 22.43, false, 12, 7, 1, 18.72, 3.08, 17.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 9, 'AXM477', 29.48, 0.51, 22.11, false, 13, 8, 3, 15.13, 3.08, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 13, 'AXM477', 26.83, 0.52, 22.20, false, 4, 5, 2, 9.15, 2.61, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 17, 'AXM477', 30.44, 0.50, 22.40, false, 10, 6, 1, 15.56, 2.86, 6.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 1, 'AXM477', 33.39, 0.49, 22.26, false, 42, 3, 4, 8.83, 2.81, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 5, 'AXM477', 28.80, 0.50, 22.18, false, 10, 10, 4, 10.75, 2.53, 3.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 9, 'AXM477', 26.51, 0.53, 22.29, false, 4, 2, 2, 17.30, 2.43, 14.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 13, 'AXM477', 32.26, 0.52, 22.38, false, 15, 13, 2, 14.26, 2.05, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 17, 'AXM477', 29.30, 0.53, 22.41, false, 19, 15, 3, 12.70, 2.73, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 1, 'AXM477', 26.40, 0.53, 22.16, false, 32, 20, 3, 8.92, 2.73, 8.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 5, 'AXM477', 33.55, 0.52, 22.42, false, 4, 14, 1, 19.92, 2.70, 17.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 9, 'AXM477', 31.65, 0.49, 22.42, false, 19, 15, 6, 20.05, 2.18, 8.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 13, 'AXM477', 32.62, 0.47, 22.44, false, 12, 9, 0, 9.32, 3.19, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 17, 'AXM477', 32.27, 0.49, 22.21, false, 17, 17, 1, 11.58, 2.83, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 1, 'AXM477', 24.12, 0.98, 20.62, false, 44, 13, 0, 17.42, 3.97, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 5, 'AXM477', 24.17, 1.03, 20.66, false, 45, 20, 6, 18.93, 4.50, 6.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 9, 'AXM477', 24.04, 0.99, 21.67, false, 35, 13, 4, 11.66, 3.93, 11.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 13, 'AXM477', 23.66, 1.02, 20.56, false, 73, 20, 3, 10.61, 4.00, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 17, 'AXM477', 23.84, 1.00, 21.12, false, 51, 13, 3, 18.40, 4.21, 16.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 1, 'AXM477', 23.98, 1.02, 20.71, false, 54, 15, 6, 14.13, 4.04, 10.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 5, 'AXM477', 23.64, 0.97, 21.62, false, 13, 4, 1, 21.92, 3.92, 16.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 9, 'AXM477', 24.43, 1.00, 21.01, false, 71, 18, 10, 9.41, 4.35, 7.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 13, 'AXM477', 24.34, 1.03, 20.60, false, 29, 8, 3, 17.97, 3.70, 16.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 17, 'AXM477', 24.03, 1.00, 20.02, false, 13, 6, 2, 9.16, 3.91, 7.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 1, 'AXM477', 23.91, 1.01, 21.71, false, 12, 4, 2, 17.90, 4.14, 14.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 5, 'AXM477', 24.42, 1.02, 21.04, false, 34, 17, 2, 15.25, 3.65, 15.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 9, 'AXM477', 24.03, 1.00, 20.97, false, 53, 18, 10, 21.32, 3.86, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 13, 'AXM477', 23.86, 1.02, 20.11, false, 28, 8, 4, 14.02, 3.76, 6.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 17, 'AXM477', 24.21, 0.99, 20.86, false, 31, 11, 2, 10.62, 3.83, 10.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 1, 'AXM477', 25.44, 9.85, 24.67, false, 44, 13, 0, 17.51, 4.15, 7.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 5, 'AXM477', 24.17, 9.75, 25.75, false, 47, 20, 6, 19.08, 4.90, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 9, 'AXM477', 24.09, 9.95, 24.71, false, 36, 13, 4, 11.76, 4.23, 11.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 13, 'AXM477', 24.30, 10.23, 25.36, false, 75, 20, 3, 10.63, 4.11, 7.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 17, 'AXM477', 26.71, 9.66, 24.99, false, 51, 14, 3, 18.57, 4.42, 16.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 1, 'AXM477', 27.05, 10.13, 24.37, false, 55, 16, 7, 14.28, 4.12, 10.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 5, 'AXM477', 24.59, 10.50, 24.01, false, 14, 4, 2, 22.00, 3.96, 16.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 9, 'AXM477', 25.40, 9.63, 24.28, false, 73, 19, 10, 9.55, 4.55, 7.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 13, 'AXM477', 26.94, 10.06, 24.95, false, 30, 9, 4, 18.09, 3.74, 16.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 17, 'AXM477', 24.25, 9.95, 24.31, false, 15, 6, 2, 9.18, 4.30, 7.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 1, 'AXM477', 25.03, 10.17, 24.94, false, 13, 5, 2, 17.93, 4.26, 14.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 5, 'AXM477', 26.40, 9.54, 24.92, false, 35, 18, 2, 15.30, 3.69, 15.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 9, 'AXM477', 25.08, 9.68, 24.14, false, 55, 18, 10, 21.48, 3.98, 7.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 13, 'AXM477', 25.21, 9.82, 25.36, false, 29, 8, 4, 14.05, 4.15, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 17, 'AXM477', 24.84, 10.08, 25.32, false, 33, 12, 3, 10.80, 4.05, 10.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 1, 'AXM477', 27.59, 8.29, 27.42, false, 45, 14, 1, 17.63, 4.53, 7.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 5, 'AXM477', 27.39, 7.68, 26.86, false, 48, 20, 6, 19.18, 5.03, 7.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 9, 'AXM477', 26.84, 8.78, 27.05, false, 36, 13, 5, 11.92, 4.29, 11.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 13, 'AXM477', 27.50, 7.70, 26.73, false, 77, 20, 4, 10.71, 4.41, 7.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 17, 'AXM477', 27.51, 8.79, 26.52, false, 52, 14, 4, 18.64, 4.66, 16.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 1, 'AXM477', 27.84, 8.98, 26.43, false, 55, 16, 7, 14.37, 4.22, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 5, 'AXM477', 25.05, 7.60, 26.85, false, 14, 5, 3, 22.07, 4.14, 16.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 9, 'AXM477', 27.16, 8.38, 26.07, false, 75, 20, 10, 9.70, 4.57, 7.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 13, 'AXM477', 30.87, 7.73, 26.08, false, 31, 10, 5, 18.26, 3.83, 16.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 17, 'AXM477', 25.92, 7.81, 27.10, false, 17, 6, 2, 9.26, 4.48, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 1, 'AXM477', 28.03, 8.21, 26.26, false, 15, 5, 3, 18.02, 4.31, 14.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 5, 'AXM477', 27.44, 8.49, 26.68, false, 37, 19, 3, 15.43, 3.76, 15.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 9, 'AXM477', 26.61, 7.07, 26.49, false, 57, 18, 10, 21.55, 4.26, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 13, 'AXM477', 26.04, 8.88, 26.96, false, 30, 9, 4, 14.19, 4.15, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 17, 'AXM477', 26.34, 8.71, 26.73, false, 35, 13, 4, 10.95, 4.21, 10.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 1, 'AXM477', 28.75, 0.50, 22.18, false, 47, 15, 1, 17.75, 4.92, 7.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 5, 'AXM477', 29.10, 0.49, 22.45, false, 48, 20, 6, 19.21, 5.40, 7.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 9, 'AXM477', 28.36, 0.49, 22.09, false, 38, 14, 5, 11.99, 4.34, 11.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 13, 'AXM477', 31.35, 0.49, 22.41, false, 77, 20, 4, 10.84, 4.61, 7.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 17, 'AXM477', 28.46, 0.49, 22.11, false, 52, 14, 4, 18.69, 4.91, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 1, 'AXM477', 29.21, 0.50, 22.08, false, 56, 17, 8, 14.53, 4.34, 10.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 5, 'AXM477', 26.16, 0.50, 22.14, false, 14, 5, 3, 22.15, 4.24, 16.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 9, 'AXM477', 29.48, 0.49, 22.08, false, 76, 20, 10, 9.76, 4.58, 7.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 13, 'AXM477', 33.78, 0.52, 22.28, false, 32, 10, 5, 18.39, 4.19, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 17, 'AXM477', 29.57, 0.48, 22.19, false, 19, 6, 2, 9.36, 4.78, 7.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 1, 'AXM477', 31.62, 0.48, 22.13, false, 17, 6, 3, 18.12, 4.53, 14.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 5, 'AXM477', 30.35, 0.53, 22.34, false, 37, 20, 4, 15.46, 3.93, 15.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 9, 'AXM477', 29.32, 0.53, 22.09, false, 58, 19, 10, 21.60, 4.54, 7.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 13, 'AXM477', 27.51, 0.51, 22.14, false, 30, 9, 4, 14.36, 4.28, 6.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 17, 'AXM477', 27.70, 0.52, 22.37, false, 35, 14, 5, 10.95, 4.50, 10.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 1, 'AXM477', 24.12, 1.00, 20.17, false, 62, 15, 13, 16.04, 5.53, 12.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 5, 'AXM477', 24.15, 0.99, 21.90, false, 70, 19, 7, 16.18, 5.74, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 9, 'AXM477', 24.46, 0.99, 20.73, false, 31, 9, 6, 21.63, 5.78, 17.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 13, 'AXM477', 23.95, 1.02, 21.02, false, 62, 17, 4, 20.24, 5.86, 14.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 17, 'AXM477', 23.87, 1.01, 20.05, false, 43, 14, 5, 12.72, 6.43, 8.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 1, 'AXM477', 24.15, 1.00, 20.26, false, 70, 17, 11, 14.83, 6.06, 11.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 5, 'AXM477', 24.31, 1.01, 20.62, false, 48, 13, 6, 21.17, 6.15, 14.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 9, 'AXM477', 23.99, 1.02, 21.50, false, 32, 9, 3, 14.15, 5.87, 11.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 13, 'AXM477', 24.32, 1.00, 20.67, false, 48, 10, 2, 16.47, 5.53, 10.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 17, 'AXM477', 23.75, 0.97, 21.84, false, 82, 20, 6, 16.39, 5.55, 6.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 1, 'AXM477', 24.36, 1.01, 20.37, false, 23, 7, 5, 11.82, 5.50, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 5, 'AXM477', 24.27, 0.99, 21.31, false, 31, 9, 7, 20.18, 6.15, 8.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 9, 'AXM477', 24.05, 1.01, 21.47, false, 59, 15, 1, 13.06, 5.68, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 13, 'AXM477', 23.63, 1.01, 20.71, false, 49, 16, 5, 22.26, 6.48, 12.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 17, 'AXM477', 24.34, 0.99, 20.73, false, 55, 14, 1, 17.10, 6.04, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 1, 'AXM477', 27.87, 10.46, 25.44, false, 62, 16, 14, 16.09, 5.89, 12.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 5, 'AXM477', 25.95, 9.73, 25.41, false, 71, 19, 8, 16.21, 5.78, 7.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 9, 'AXM477', 25.32, 9.90, 25.53, false, 31, 9, 7, 21.70, 6.01, 17.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 13, 'AXM477', 27.44, 10.45, 26.11, false, 63, 17, 5, 20.30, 5.95, 14.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 17, 'AXM477', 27.30, 10.33, 24.49, false, 43, 14, 5, 12.81, 6.81, 8.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 1, 'AXM477', 26.99, 10.14, 24.36, false, 71, 18, 11, 14.89, 6.37, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 5, 'AXM477', 26.27, 9.90, 24.34, false, 48, 13, 6, 21.29, 6.53, 14.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 9, 'AXM477', 27.40, 9.87, 25.87, false, 32, 9, 4, 14.35, 5.94, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 13, 'AXM477', 28.05, 9.67, 25.20, false, 50, 10, 3, 16.62, 5.81, 10.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 17, 'AXM477', 27.49, 9.91, 24.42, false, 83, 20, 6, 16.43, 5.77, 6.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 1, 'AXM477', 25.20, 10.20, 25.72, false, 24, 8, 5, 11.89, 5.61, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 5, 'AXM477', 26.26, 10.48, 24.27, false, 33, 10, 8, 20.23, 6.52, 8.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 9, 'AXM477', 27.97, 9.77, 24.25, false, 61, 15, 1, 13.22, 5.95, 7.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 13, 'AXM477', 27.38, 9.99, 24.38, false, 50, 16, 5, 22.43, 6.67, 12.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 17, 'AXM477', 24.59, 10.34, 24.85, false, 57, 14, 2, 17.20, 6.30, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 1, 'AXM477', 31.17, 7.49, 26.43, false, 62, 16, 15, 16.23, 5.90, 12.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 5, 'AXM477', 29.83, 7.16, 26.24, false, 72, 20, 8, 16.27, 6.04, 7.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 9, 'AXM477', 27.09, 8.07, 26.31, false, 33, 10, 7, 21.79, 6.05, 17.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 13, 'AXM477', 28.44, 8.72, 26.09, false, 65, 18, 5, 20.41, 6.14, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 17, 'AXM477', 27.58, 7.33, 26.03, false, 43, 15, 5, 12.92, 7.00, 8.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 1, 'AXM477', 30.62, 7.89, 27.04, false, 73, 19, 11, 14.99, 6.47, 11.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 5, 'AXM477', 27.67, 8.53, 26.16, false, 48, 14, 7, 21.41, 6.64, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 9, 'AXM477', 29.53, 7.86, 26.45, false, 33, 9, 4, 14.41, 6.09, 11.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 13, 'AXM477', 30.68, 7.78, 26.66, false, 51, 10, 3, 16.66, 6.13, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 17, 'AXM477', 28.97, 8.80, 26.93, false, 84, 20, 6, 16.45, 5.90, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 1, 'AXM477', 27.81, 8.19, 26.18, false, 26, 8, 5, 12.07, 5.80, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 5, 'AXM477', 29.41, 8.77, 27.47, false, 33, 11, 8, 20.27, 6.88, 8.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 9, 'AXM477', 31.21, 8.63, 26.43, false, 61, 15, 1, 13.27, 6.29, 7.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 13, 'AXM477', 27.74, 7.61, 26.11, false, 51, 17, 6, 22.59, 6.72, 12.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 17, 'AXM477', 26.50, 8.45, 27.55, false, 58, 14, 2, 17.23, 6.61, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 1, 'AXM477', 33.57, 0.52, 22.04, false, 64, 16, 16, 16.42, 6.07, 12.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 5, 'AXM477', 29.84, 0.53, 22.39, false, 73, 20, 8, 16.39, 6.20, 7.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 9, 'AXM477', 30.93, 0.50, 22.38, false, 35, 10, 7, 21.92, 6.32, 17.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 13, 'AXM477', 31.55, 0.49, 22.45, false, 65, 19, 6, 20.60, 6.49, 14.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 17, 'AXM477', 29.73, 0.50, 22.27, false, 43, 16, 6, 12.97, 7.30, 8.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 1, 'AXM477', 34.38, 0.52, 22.53, false, 75, 19, 11, 15.09, 6.79, 11.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 5, 'AXM477', 28.89, 0.53, 22.42, false, 48, 14, 8, 21.49, 6.76, 14.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 9, 'AXM477', 31.16, 0.51, 22.52, false, 33, 10, 4, 14.45, 6.20, 11.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 13, 'AXM477', 34.05, 0.50, 22.44, false, 51, 11, 3, 16.85, 6.17, 10.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 17, 'AXM477', 29.25, 0.49, 22.46, false, 85, 20, 7, 16.59, 6.21, 6.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 1, 'AXM477', 31.05, 0.51, 22.07, false, 26, 9, 5, 12.08, 6.02, 11.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 5, 'AXM477', 29.68, 0.52, 22.17, false, 33, 11, 9, 20.39, 7.07, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 9, 'AXM477', 35.09, 0.50, 22.16, false, 62, 16, 1, 13.28, 6.42, 7.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 13, 'AXM477', 29.61, 0.49, 22.39, false, 53, 18, 7, 22.77, 6.94, 12.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 17, 'AXM477', 29.17, 0.49, 22.17, false, 60, 15, 2, 17.36, 6.67, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 1, 'AXM477', 23.82, 1.03, 21.47, false, 90, 17, 6, 25.46, 8.28, 18.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 5, 'AXM477', 23.58, 0.97, 21.19, false, 111, 16, 12, 21.77, 7.95, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 9, 'AXM477', 24.37, 0.97, 21.73, false, 117, 20, 4, 19.77, 7.67, 10.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 13, 'AXM477', 24.33, 1.00, 20.39, false, 88, 13, 16, 21.29, 8.09, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 17, 'AXM477', 24.44, 0.97, 21.38, false, 65, 11, 7, 14.28, 8.05, 8.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 1, 'AXM477', 24.23, 1.03, 22.04, false, 120, 18, 11, 24.31, 7.87, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 5, 'AXM477', 23.55, 1.00, 21.21, false, 61, 10, 13, 25.16, 8.43, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 9, 'AXM477', 24.29, 1.03, 21.43, false, 122, 20, 2, 16.89, 7.80, 14.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 13, 'AXM477', 23.58, 1.01, 20.48, false, 71, 13, 14, 23.35, 8.45, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 17, 'AXM477', 23.63, 0.98, 20.26, false, 101, 18, 21, 13.22, 7.69, 8.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 1, 'AXM477', 24.42, 1.00, 21.67, false, 113, 20, 12, 18.05, 8.08, 15.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 5, 'AXM477', 24.37, 1.03, 21.59, false, 109, 20, 22, 14.69, 8.11, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 9, 'AXM477', 24.21, 1.00, 21.20, false, 53, 10, 12, 17.05, 8.36, 15.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 13, 'AXM477', 24.40, 1.02, 21.30, false, 111, 20, 19, 17.41, 7.60, 9.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 17, 'AXM477', 24.46, 0.99, 21.81, false, 92, 18, 14, 19.01, 7.98, 8.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 1, 'AXM477', 26.73, 10.29, 25.88, false, 92, 17, 6, 25.49, 8.33, 18.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 5, 'AXM477', 25.29, 10.22, 26.08, false, 113, 17, 13, 21.88, 8.12, 11.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 9, 'AXM477', 24.44, 10.44, 25.59, false, 118, 20, 4, 19.92, 7.88, 10.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 13, 'AXM477', 27.25, 10.20, 25.14, false, 90, 13, 17, 21.43, 8.20, 9.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 17, 'AXM477', 28.28, 10.41, 25.36, false, 67, 12, 8, 14.47, 8.09, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 1, 'AXM477', 26.06, 10.17, 24.90, false, 120, 18, 11, 24.45, 7.89, 14.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 5, 'AXM477', 26.91, 10.02, 24.59, false, 63, 11, 14, 25.34, 8.80, 17.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 9, 'AXM477', 25.15, 9.58, 25.83, false, 124, 20, 3, 17.03, 7.91, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 13, 'AXM477', 26.39, 10.29, 24.98, false, 71, 14, 14, 23.45, 8.56, 14.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 17, 'AXM477', 24.87, 10.01, 25.54, false, 101, 19, 22, 13.33, 7.79, 8.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 1, 'AXM477', 27.19, 9.51, 24.58, false, 113, 20, 12, 18.09, 8.46, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 5, 'AXM477', 27.09, 10.22, 25.94, false, 109, 20, 22, 14.87, 8.45, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 9, 'AXM477', 24.45, 9.85, 25.28, false, 54, 10, 13, 17.07, 8.65, 15.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 13, 'AXM477', 27.61, 9.86, 24.90, false, 112, 20, 19, 17.55, 7.92, 9.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 17, 'AXM477', 24.56, 9.76, 25.54, false, 92, 18, 14, 19.14, 8.10, 8.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 1, 'AXM477', 28.15, 8.69, 26.18, false, 94, 17, 7, 25.59, 8.43, 18.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 5, 'AXM477', 27.85, 8.84, 27.73, false, 114, 17, 13, 22.02, 8.52, 11.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 9, 'AXM477', 25.53, 7.79, 26.51, false, 120, 20, 5, 20.09, 8.00, 10.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 13, 'AXM477', 29.67, 8.90, 26.26, false, 92, 14, 18, 21.47, 8.35, 9.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 17, 'AXM477', 29.82, 8.23, 26.79, false, 69, 13, 8, 14.66, 8.16, 8.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 1, 'AXM477', 26.93, 7.18, 26.53, false, 121, 19, 12, 24.62, 8.19, 14.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 5, 'AXM477', 30.35, 8.54, 27.40, false, 63, 11, 14, 25.51, 8.95, 17.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 9, 'AXM477', 26.66, 7.78, 27.33, false, 124, 20, 3, 17.19, 8.25, 15.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 13, 'AXM477', 29.40, 8.76, 27.59, false, 72, 15, 15, 23.47, 8.69, 14.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 17, 'AXM477', 26.73, 8.89, 27.19, false, 101, 19, 23, 13.35, 7.92, 8.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 1, 'AXM477', 31.07, 7.06, 26.10, false, 115, 20, 13, 18.25, 8.61, 15.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 5, 'AXM477', 30.74, 7.81, 26.26, false, 110, 20, 23, 15.06, 8.81, 11.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 9, 'AXM477', 25.11, 8.23, 27.16, false, 56, 11, 13, 17.13, 8.79, 16.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 13, 'AXM477', 30.25, 7.79, 26.30, false, 113, 20, 20, 17.56, 7.94, 9.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 17, 'AXM477', 26.31, 7.11, 26.79, false, 92, 19, 15, 19.33, 8.29, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 1, 'AXM477', 29.16, 0.47, 22.32, false, 96, 18, 8, 25.74, 8.50, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 5, 'AXM477', 30.19, 0.52, 22.19, false, 116, 17, 14, 22.09, 8.55, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 9, 'AXM477', 26.34, 0.50, 22.19, false, 120, 20, 6, 20.19, 8.20, 10.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 13, 'AXM477', 32.29, 0.47, 22.06, false, 94, 14, 19, 21.60, 8.61, 9.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 17, 'AXM477', 30.65, 0.52, 22.04, false, 71, 14, 9, 14.68, 8.51, 8.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 1, 'AXM477', 27.06, 0.52, 22.40, false, 123, 19, 12, 24.81, 8.34, 14.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 5, 'AXM477', 31.94, 0.48, 22.38, false, 63, 11, 15, 25.55, 9.20, 17.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 9, 'AXM477', 30.16, 0.52, 22.11, false, 125, 20, 3, 17.29, 8.47, 15.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 13, 'AXM477', 30.23, 0.49, 22.25, false, 74, 15, 15, 23.49, 8.93, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 17, 'AXM477', 30.69, 0.48, 22.06, false, 101, 20, 23, 13.54, 8.22, 8.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 1, 'AXM477', 33.88, 0.53, 22.33, false, 116, 20, 13, 18.25, 8.77, 15.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 5, 'AXM477', 31.91, 0.48, 22.37, false, 112, 20, 24, 15.25, 9.17, 11.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 9, 'AXM477', 26.94, 0.52, 22.19, false, 56, 12, 14, 17.15, 8.95, 16.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 13, 'AXM477', 33.03, 0.50, 22.47, false, 114, 20, 20, 17.69, 8.00, 9.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 17, 'AXM477', 26.84, 0.51, 22.25, false, 93, 19, 16, 19.51, 8.66, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 1, 'AXM477', 23.94, 0.97, 21.25, false, 183, 20, 38, 23.54, 11.51, 19.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 5, 'AXM477', 24.32, 0.98, 20.86, false, 194, 20, 23, 23.63, 12.26, 18.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 9, 'AXM477', 24.10, 1.02, 21.21, false, 113, 12, 19, 27.45, 11.78, 19.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 13, 'AXM477', 23.53, 1.03, 20.15, false, 182, 20, 28, 29.58, 11.85, 29.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 17, 'AXM477', 24.11, 1.01, 20.59, false, 159, 19, 33, 28.16, 11.62, 20.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 1, 'AXM477', 23.89, 0.98, 21.35, false, 191, 20, 29, 19.07, 12.07, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 5, 'AXM477', 23.73, 1.00, 20.61, false, 190, 20, 38, 17.98, 11.91, 12.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 9, 'AXM477', 24.15, 1.01, 20.24, false, 197, 20, 23, 21.64, 12.42, 15.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 13, 'AXM477', 24.46, 0.99, 21.09, false, 135, 14, 6, 21.25, 11.53, 16.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 17, 'AXM477', 24.45, 0.99, 20.85, false, 183, 19, 29, 18.33, 11.93, 13.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 1, 'AXM477', 24.17, 1.00, 21.07, false, 187, 19, 3, 23.25, 12.38, 21.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 5, 'AXM477', 24.44, 1.02, 20.60, false, 177, 20, 22, 22.40, 11.89, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 9, 'AXM477', 23.77, 1.03, 20.03, false, 163, 20, 2, 24.86, 12.42, 14.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 13, 'AXM477', 23.96, 0.98, 21.06, false, 110, 13, 4, 25.14, 11.52, 21.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 17, 'AXM477', 23.60, 1.02, 20.25, false, 168, 20, 3, 24.35, 12.22, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 1, 'AXM477', 24.52, 9.79, 24.00, false, 184, 20, 39, 23.62, 11.73, 19.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 5, 'AXM477', 24.91, 10.16, 24.96, false, 195, 20, 24, 23.65, 12.42, 18.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 9, 'AXM477', 27.42, 9.85, 25.57, false, 115, 12, 20, 27.52, 11.89, 19.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 13, 'AXM477', 26.88, 10.45, 24.62, false, 184, 20, 28, 29.61, 11.96, 29.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 17, 'AXM477', 26.87, 9.85, 25.72, false, 160, 19, 34, 28.34, 11.72, 20.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 1, 'AXM477', 26.24, 10.24, 24.66, false, 191, 20, 29, 19.22, 12.08, 13.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 5, 'AXM477', 24.68, 9.68, 25.21, false, 190, 20, 39, 18.15, 12.29, 12.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 9, 'AXM477', 27.49, 10.14, 26.01, false, 199, 20, 23, 21.70, 12.74, 15.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 13, 'AXM477', 27.75, 9.77, 25.73, false, 137, 14, 6, 21.29, 11.93, 16.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 17, 'AXM477', 27.12, 10.15, 24.33, false, 183, 19, 30, 18.41, 12.16, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 1, 'AXM477', 27.75, 10.17, 24.17, false, 189, 19, 3, 23.36, 12.53, 21.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 5, 'AXM477', 24.63, 9.77, 24.62, false, 178, 20, 23, 22.51, 12.22, 13.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 9, 'AXM477', 26.25, 10.49, 24.36, false, 163, 20, 3, 24.96, 12.61, 14.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 13, 'AXM477', 26.35, 9.93, 25.81, false, 111, 13, 5, 25.23, 11.72, 21.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 17, 'AXM477', 25.36, 10.23, 24.18, false, 169, 20, 3, 24.49, 12.49, 14.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 1, 'AXM477', 26.05, 8.75, 27.61, false, 186, 20, 39, 23.64, 11.91, 19.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 5, 'AXM477', 25.83, 8.90, 27.17, false, 195, 20, 24, 23.76, 12.77, 18.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 9, 'AXM477', 29.86, 8.32, 26.21, false, 115, 12, 20, 27.56, 12.15, 20.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 13, 'AXM477', 27.71, 8.91, 27.41, false, 185, 20, 28, 29.80, 12.33, 29.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 17, 'AXM477', 30.77, 7.49, 26.22, false, 160, 20, 35, 28.49, 12.04, 20.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 1, 'AXM477', 27.02, 7.44, 26.84, false, 193, 20, 29, 19.36, 12.30, 13.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 5, 'AXM477', 26.30, 7.33, 26.55, false, 191, 20, 40, 18.28, 12.59, 12.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 9, 'AXM477', 29.75, 7.34, 26.40, false, 201, 20, 23, 21.84, 12.81, 15.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 13, 'AXM477', 29.06, 7.03, 26.87, false, 138, 14, 7, 21.30, 12.16, 16.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 17, 'AXM477', 28.26, 7.10, 26.74, false, 185, 20, 31, 18.60, 12.20, 13.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 1, 'AXM477', 29.69, 7.35, 26.54, false, 189, 20, 4, 23.46, 12.69, 21.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 5, 'AXM477', 28.55, 7.82, 27.25, false, 179, 20, 24, 22.59, 12.41, 13.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 9, 'AXM477', 27.01, 8.77, 26.86, false, 164, 20, 3, 25.00, 12.85, 14.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 13, 'AXM477', 29.77, 7.83, 26.73, false, 111, 14, 6, 25.27, 11.79, 21.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 17, 'AXM477', 27.22, 7.22, 26.02, false, 169, 20, 4, 24.56, 12.79, 14.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 1, 'AXM477', 26.55, 0.52, 22.10, false, 188, 20, 39, 23.75, 11.94, 19.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 5, 'AXM477', 26.95, 0.50, 22.40, false, 196, 20, 24, 23.93, 12.89, 18.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 9, 'AXM477', 30.45, 0.48, 22.17, false, 116, 12, 21, 27.72, 12.23, 20.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 13, 'AXM477', 29.09, 0.49, 22.15, false, 186, 20, 29, 29.85, 12.57, 29.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 17, 'AXM477', 33.86, 0.47, 22.34, false, 161, 20, 36, 28.53, 12.06, 20.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 1, 'AXM477', 30.58, 0.47, 22.36, false, 195, 20, 29, 19.39, 12.61, 13.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 5, 'AXM477', 26.67, 0.48, 22.18, false, 191, 20, 41, 18.37, 12.62, 13.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 9, 'AXM477', 32.84, 0.47, 22.40, false, 201, 20, 24, 22.02, 12.89, 15.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 13, 'AXM477', 29.93, 0.52, 22.30, false, 140, 15, 8, 21.36, 12.40, 17.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 17, 'AXM477', 31.55, 0.51, 22.26, false, 187, 20, 32, 18.71, 12.38, 13.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 1, 'AXM477', 32.04, 0.48, 22.23, false, 190, 20, 4, 23.66, 13.06, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 5, 'AXM477', 31.72, 0.52, 22.50, false, 179, 20, 24, 22.67, 12.63, 13.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 9, 'AXM477', 28.56, 0.51, 22.40, false, 166, 20, 3, 25.04, 13.10, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 13, 'AXM477', 30.13, 0.53, 22.01, false, 112, 14, 6, 25.37, 12.08, 21.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 17, 'AXM477', 27.97, 0.50, 22.22, false, 170, 20, 4, 24.60, 13.18, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 1, 'AXM477', 24.39, 1.01, 20.05, false, 249, 20, 3, 25.59, 16.03, 16.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 5, 'AXM477', 23.56, 0.99, 21.34, false, 236, 20, 45, 26.93, 16.26, 19.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 9, 'AXM477', 24.30, 1.00, 21.39, false, 154, 12, 21, 24.44, 15.68, 19.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 13, 'AXM477', 24.29, 0.99, 20.88, false, 238, 20, 14, 26.03, 15.55, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 17, 'AXM477', 23.99, 1.01, 20.88, false, 243, 19, 34, 25.51, 15.83, 22.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 1, 'AXM477', 23.56, 1.02, 20.66, false, 253, 20, 27, 28.51, 15.82, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 5, 'AXM477', 24.40, 1.01, 20.99, false, 230, 20, 10, 27.00, 15.61, 18.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 9, 'AXM477', 23.87, 0.98, 21.80, false, 246, 20, 43, 24.96, 15.58, 22.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 13, 'AXM477', 24.02, 1.01, 20.87, false, 155, 14, 29, 30.91, 16.04, 29.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 17, 'AXM477', 23.54, 0.99, 21.54, false, 236, 19, 20, 31.11, 16.25, 29.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 1, 'AXM477', 24.27, 1.02, 21.15, false, 234, 19, 49, 31.18, 16.32, 30.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 5, 'AXM477', 23.69, 0.99, 21.06, false, 230, 20, 15, 30.05, 16.50, 28.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 9, 'AXM477', 23.75, 1.02, 21.02, false, 221, 20, 35, 32.69, 16.29, 21.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 13, 'AXM477', 23.63, 1.01, 20.72, false, 161, 13, 26, 21.83, 15.94, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 17, 'AXM477', 24.19, 0.99, 21.44, false, 229, 20, 23, 26.65, 16.49, 16.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 1, 'AXM477', 25.58, 10.34, 25.47, false, 250, 20, 3, 25.60, 16.18, 17.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 5, 'AXM477', 27.43, 10.16, 24.78, false, 238, 20, 46, 27.05, 16.62, 19.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 9, 'AXM477', 27.63, 9.82, 24.67, false, 155, 12, 21, 24.60, 15.96, 19.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 13, 'AXM477', 26.35, 10.03, 24.38, false, 240, 20, 15, 26.07, 15.85, 18.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 17, 'AXM477', 27.39, 9.72, 24.20, false, 244, 19, 34, 25.66, 16.07, 22.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 1, 'AXM477', 24.03, 9.61, 25.78, false, 255, 20, 27, 28.53, 16.18, 20.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 5, 'AXM477', 25.12, 9.76, 24.79, false, 231, 20, 11, 27.14, 15.67, 18.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 9, 'AXM477', 27.10, 9.87, 25.12, false, 246, 20, 43, 25.00, 15.95, 22.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 13, 'AXM477', 25.59, 9.94, 25.71, false, 157, 14, 29, 31.06, 16.31, 30.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 17, 'AXM477', 25.25, 10.07, 25.03, false, 237, 19, 21, 31.28, 16.36, 30.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 1, 'AXM477', 28.18, 10.41, 24.09, false, 235, 19, 49, 31.32, 16.36, 30.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 5, 'AXM477', 25.52, 9.51, 25.01, false, 231, 20, 15, 30.08, 16.72, 28.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 9, 'AXM477', 25.82, 9.98, 24.28, false, 222, 20, 35, 32.71, 16.62, 21.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 13, 'AXM477', 24.71, 10.25, 25.58, false, 162, 13, 27, 21.94, 16.18, 17.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 17, 'AXM477', 26.46, 10.48, 24.06, false, 231, 20, 24, 26.65, 16.65, 16.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 1, 'AXM477', 29.10, 8.18, 27.16, false, 251, 20, 4, 25.73, 16.57, 17.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 5, 'AXM477', 28.29, 7.74, 26.43, false, 240, 20, 46, 27.09, 16.63, 19.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 9, 'AXM477', 28.74, 7.05, 26.55, false, 155, 12, 22, 24.71, 16.03, 19.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 13, 'AXM477', 29.89, 7.06, 26.34, false, 240, 20, 15, 26.20, 16.03, 18.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 17, 'AXM477', 28.77, 7.84, 27.31, false, 246, 20, 34, 25.78, 16.24, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 1, 'AXM477', 26.73, 8.96, 27.27, false, 255, 20, 27, 28.73, 16.51, 20.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 5, 'AXM477', 26.94, 8.84, 27.71, false, 233, 20, 11, 27.26, 15.75, 19.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 9, 'AXM477', 27.99, 7.61, 27.04, false, 246, 20, 44, 25.03, 16.10, 22.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 13, 'AXM477', 25.63, 7.20, 26.01, false, 158, 14, 29, 31.22, 16.49, 30.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 17, 'AXM477', 26.39, 7.56, 27.23, false, 239, 20, 21, 31.29, 16.70, 30.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 1, 'AXM477', 30.94, 8.88, 27.49, false, 235, 20, 49, 31.40, 16.68, 30.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 5, 'AXM477', 26.48, 8.99, 27.35, false, 231, 20, 15, 30.13, 17.11, 28.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 9, 'AXM477', 28.60, 8.42, 26.11, false, 224, 20, 36, 32.81, 16.84, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 13, 'AXM477', 28.41, 8.73, 27.06, false, 162, 14, 27, 21.95, 16.36, 17.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 17, 'AXM477', 28.07, 8.06, 26.43, false, 231, 20, 24, 26.72, 16.69, 16.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 1, 'AXM477', 30.77, 0.51, 22.17, false, 253, 20, 4, 25.87, 16.92, 17.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 5, 'AXM477', 28.93, 0.52, 22.27, false, 241, 20, 46, 27.23, 16.96, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 9, 'AXM477', 31.25, 0.51, 22.37, false, 157, 12, 22, 24.90, 16.13, 20.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 13, 'AXM477', 33.67, 0.50, 22.07, false, 242, 20, 15, 26.31, 16.39, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 17, 'AXM477', 32.71, 0.47, 22.35, false, 247, 20, 34, 25.97, 16.51, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 1, 'AXM477', 30.49, 0.52, 22.41, false, 256, 20, 27, 28.92, 16.58, 20.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 5, 'AXM477', 27.98, 0.52, 22.12, false, 234, 20, 11, 27.38, 16.07, 19.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 9, 'AXM477', 31.00, 0.50, 22.23, false, 247, 20, 44, 25.19, 16.38, 22.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 13, 'AXM477', 27.04, 0.52, 22.02, false, 159, 15, 30, 31.39, 16.55, 30.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 17, 'AXM477', 28.65, 0.50, 22.33, false, 240, 20, 21, 31.45, 16.86, 30.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 1, 'AXM477', 31.78, 0.48, 22.22, false, 235, 20, 50, 31.54, 16.83, 30.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 5, 'AXM477', 28.89, 0.47, 22.30, false, 232, 20, 16, 30.20, 17.48, 28.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 9, 'AXM477', 31.88, 0.52, 22.31, false, 226, 20, 37, 32.98, 17.09, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 13, 'AXM477', 31.10, 0.52, 22.50, false, 163, 14, 27, 22.10, 16.51, 17.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 17, 'AXM477', 29.96, 0.52, 22.02, false, 233, 20, 24, 26.90, 16.84, 16.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 10, 'AXM478', 26.92, 10.01, 24.24, false, 22, 20, 2, 13.66, 2.09, 5.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 10, 'AXM478', 23.55, 0.99, 20.95, false, 14, 10, 3, 9.26, 1.52, 2.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 10, 'AXM478', 27.55, 0.51, 22.23, false, 15, 13, 4, 9.35, 1.94, 2.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 10, 'AXM478', 24.40, 7.02, 26.35, false, 42, 19, 6, 20.92, 4.27, 10.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 10, 'AXM478', 28.03, 10.23, 24.12, false, 55, 12, 5, 18.69, 6.06, 15.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 10, 'AXM478', 24.03, 1.02, 21.45, false, 120, 20, 5, 20.82, 7.80, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 10, 'AXM478', 26.61, 0.48, 22.44, false, 124, 20, 7, 21.20, 8.64, 14.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 10, 'AXM478', 29.35, 8.28, 27.39, false, 173, 20, 20, 17.53, 12.25, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 10, 'AXM478', 28.31, 10.20, 24.17, false, 245, 20, 47, 29.90, 15.95, 22.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 8, 'AXM480', 27.54, 9.60, 24.62, false, 13, 9, 2, 9.96, 2.51, 7.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 8, 'AXM480', 23.84, 1.00, 21.23, false, 2, 11, 0, 9.69, 1.76, 4.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 8, 'AXM480', 29.24, 0.48, 22.21, false, 6, 13, 1, 9.91, 2.31, 4.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 8, 'AXM480', 27.59, 7.59, 27.22, false, 31, 13, 6, 14.49, 4.19, 12.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 8, 'AXM480', 26.25, 9.92, 25.78, false, 84, 20, 14, 16.51, 5.65, 9.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 8, 'AXM480', 24.42, 1.02, 21.98, false, 103, 20, 4, 14.44, 8.47, 10.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 8, 'AXM480', 31.99, 0.52, 22.46, false, 106, 20, 6, 14.73, 9.14, 10.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 8, 'AXM480', 27.66, 8.78, 27.40, false, 105, 13, 22, 26.35, 12.79, 23.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 8, 'AXM480', 24.40, 9.80, 25.03, false, 140, 12, 14, 26.73, 16.53, 22.82, ''); diff --git a/Chapter14/ABQ_Data_Entry/sql/create_db.sql b/Chapter14/ABQ_Data_Entry/sql/create_db.sql deleted file mode 100644 index 011389a..0000000 --- a/Chapter14/ABQ_Data_Entry/sql/create_db.sql +++ /dev/null @@ -1,82 +0,0 @@ --- Lab techs --- Use employee ID # as primary key --- Since names can change --- Names must be unique since they will be displayed --- In a dropdown -CREATE TABLE lab_techs ( - id SMALLINT PRIMARY KEY, - name VARCHAR(512) UNIQUE NOT NULL - ); - -CREATE TABLE labs ( - id CHAR(1) PRIMARY KEY - ); - -CREATE TABLE plots ( - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - current_seed_sample CHAR(6), - PRIMARY KEY(lab_id, plot), - CONSTRAINT valid_plot CHECK (plot BETWEEN 1 AND 20) - ); - -CREATE TABLE lab_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - lab_tech_id SMALLINT NOT NULL REFERENCES lab_techs(id), - PRIMARY KEY(date, time, lab_id) - ); - -CREATE TABLE plot_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - seed_sample CHAR(6) NOT NULL, - humidity NUMERIC(4, 2) CHECK (humidity BETWEEN 0.5 AND 52.0), - light NUMERIC(5, 2) CHECK (light BETWEEN 0 AND 100), - temperature NUMERIC(4, 2) CHECK (temperature BETWEEN 4 AND 40), - equipment_fault BOOLEAN NOT NULL, - blossoms SMALLINT NOT NULL CHECK (blossoms BETWEEN 0 AND 1000), - plants SMALLINT NOT NULL CHECK (plants BETWEEN 0 AND 20), - fruit SMALLINT NOT NULL CHECK (fruit BETWEEN 0 AND 1000), - max_height NUMERIC(6, 2) NOT NULL CHECK (max_height BETWEEN 0 AND 1000), - min_height NUMERIC(6, 2) NOT NULL CHECK (min_height BETWEEN 0 AND 1000), - median_height NUMERIC(6, 2) - NOT NULL CHECK - (median_height BETWEEN min_height AND max_height), - notes TEXT, - PRIMARY KEY(date, time, lab_id, plot), - FOREIGN KEY(lab_id, date, time) - REFERENCES lab_checks(lab_id, date, time), - FOREIGN KEY(lab_id, plot) REFERENCES plots(lab_id, plot) - ); - -DROP VIEW IF EXISTS data_record_view; -CREATE VIEW data_record_view AS ( - SELECT pc.date AS "Date", - to_char(pc.time, 'FMHH24:MI') AS "Time", - lt.name AS "Technician", - pc.lab_id AS "Lab", - pc.plot AS "Plot", - pc.seed_sample AS "Seed Sample", - pc.equipment_fault AS "Equipment Fault", - pc.humidity AS "Humidity", - pc.light AS "Light", - pc.temperature AS "Temperature", - pc.plants AS "Plants", - pc.blossoms AS "Blossoms", - pc.fruit AS "Fruit", - pc.max_height AS "Max Height", - pc.min_height AS "Min Height", - pc.median_height AS "Med Height", - pc.notes AS "Notes" - FROM plot_checks AS pc - JOIN lab_checks AS lc - ON pc.lab_id = lc.lab_id - AND pc.date = lc.date - AND pc.time = lc.time - JOIN lab_techs AS lt - ON lc.lab_tech_id = lt.id - ); diff --git a/Chapter14/ABQ_Data_Entry/sql/lookup_populate.sql b/Chapter14/ABQ_Data_Entry/sql/lookup_populate.sql deleted file mode 100644 index c95e763..0000000 --- a/Chapter14/ABQ_Data_Entry/sql/lookup_populate.sql +++ /dev/null @@ -1,20 +0,0 @@ -INSERT INTO lab_techs VALUES - (4291, 'J Simms'), - (4319, 'P Taylor'), - (4478, 'Q Murphy'), - (5607, 'L Taniff') - ; - -INSERT INTO labs VALUES - ('A'), ('B'), ('C'); - -INSERT INTO plots (SELECT labs.id, plotnums.plot -FROM labs, (SELECT generate_series(1, 20) plot) AS plotnums); - -UPDATE plots SET current_seed_sample= - (CASE WHEN plot % 4 = 1 THEN 'AXM477' - WHEN plot % 4 = 2 THEN 'AXM478' - WHEN plot % 4 = 3 THEN 'AXM479' - WHEN plot % 4 = 0 THEN 'AXM480' - ELSE '' END) -; diff --git a/Chapter14/after_demo.py b/Chapter14/after_demo.py deleted file mode 100644 index d271098..0000000 --- a/Chapter14/after_demo.py +++ /dev/null @@ -1,25 +0,0 @@ -import tkinter as tk -from time import sleep - - -class App(tk.Tk): - - def __init__(self): - super().__init__() - self.status = tk.StringVar() - tk.Label(self, textvariable=self.status).pack() - tk.Button(self, text="Run Process", - command=self.run_process).pack() - - def run_process(self): - self.status.set("Starting process") - for phase in range(1, 5): - self.status.set(f"Phase {phase}") - self.process_phase(phase, 2) - self.status.set('All phases complete') - - def process_phase(self, n, length): - sleep(length) - - -App().mainloop() diff --git a/Chapter14/after_demo2.py b/Chapter14/after_demo2.py deleted file mode 100644 index 68adf51..0000000 --- a/Chapter14/after_demo2.py +++ /dev/null @@ -1,28 +0,0 @@ -import tkinter as tk -from time import sleep - - -class App(tk.Tk): - - def __init__(self): - super().__init__() - self.status = tk.StringVar() - tk.Label(self, textvariable=self.status).pack() - tk.Button(self, text="Run Process", - command=self.run_process).pack() - - def run_process(self): - self.status.set("Starting process") - self.after(50, self._run_phases) - - def _run_phases(self): - for phase in range(1, 5): - self.status.set(f"Phase {phase}") - self.process_phase(phase, 2) - self.status.set('Complete') - - def process_phase(self, n, length): - sleep(length) - - -App().mainloop() diff --git a/Chapter14/after_demo_update.py b/Chapter14/after_demo_update.py deleted file mode 100644 index 67b1131..0000000 --- a/Chapter14/after_demo_update.py +++ /dev/null @@ -1,29 +0,0 @@ -import tkinter as tk -from time import sleep - - -class App(tk.Tk): - - def __init__(self): - super().__init__() - self.status = tk.StringVar() - tk.Label(self, textvariable=self.status).pack() - tk.Button(self, text="Run Process", - command=self.run_process).pack() - - def run_process(self): - self.status.set("Starting process") - self.after(50, self._run_phases) - - def _run_phases(self): - for phase in range(1, 5): - self.status.set(f"Phase {phase}") - self.update_idletasks() - self.process_phase(phase, 2) - self.status.set('Complete') - - def process_phase(self, n, length): - sleep(length) - - -App().mainloop() diff --git a/Chapter14/basic_after_cancel_demo.py b/Chapter14/basic_after_cancel_demo.py deleted file mode 100644 index 531a23d..0000000 --- a/Chapter14/basic_after_cancel_demo.py +++ /dev/null @@ -1,9 +0,0 @@ -import tkinter as tk - -root = tk.Tk() -task_id = root.after(3000, root.quit) -tk.Button( - root, - text='Do not quit!', command=lambda: root.after_cancel(task_id) -).pack() -root.mainloop() diff --git a/Chapter14/basic_after_demo.py b/Chapter14/basic_after_demo.py deleted file mode 100644 index e44073e..0000000 --- a/Chapter14/basic_after_demo.py +++ /dev/null @@ -1,5 +0,0 @@ -import tkinter as tk - -root = tk.Tk() -root.after(1000, root.quit) -root.mainloop() diff --git a/Chapter14/basic_ftp_server.py b/Chapter14/basic_ftp_server.py deleted file mode 100644 index f812acd..0000000 --- a/Chapter14/basic_ftp_server.py +++ /dev/null @@ -1,24 +0,0 @@ -from pyftpdlib.authorizers import DummyAuthorizer -from pyftpdlib.handlers import FTPHandler -from pyftpdlib.servers import FTPServer -from time import sleep - - -auth = DummyAuthorizer() -auth.add_user('test', 'test', '.', perm='elrw') - - -class SlowFTPHandler(FTPHandler): - authorizer = auth - - def on_connect(self, *args, **kwargs): - sleep(10) - - def on_login(self, *args, **kwargs): - sleep(10) - -handler = SlowFTPHandler -address = ('127.0.0.1', 2100) -server = FTPServer(address, handler) - -server.serve_forever() diff --git a/Chapter14/basic_threading_demo.py b/Chapter14/basic_threading_demo.py deleted file mode 100644 index 8ceb056..0000000 --- a/Chapter14/basic_threading_demo.py +++ /dev/null @@ -1,29 +0,0 @@ -import tkinter as tk -from threading import Thread -from time import sleep - -def print_slowly(string): - words = string.split() - for word in words: - sleep(1) - print(word) - -class App(tk.Tk): - - def __init__(self): - super().__init__() - self.text = tk.StringVar() - tk.Entry(self, textvariable=self.text).pack() - tk.Button(self, text="Run unthreaded", - command=self.print_unthreaded).pack() - tk.Button(self, text="Run threaded", - command=self.print_threaded).pack() - - def print_unthreaded(self): - print_slowly(self.text.get()) - - def print_threaded(self): - thread = Thread(target=print_slowly, args=(self.text.get(),)) - thread.start() - -App().mainloop() diff --git a/Chapter14/basic_threading_demo_with_lock.py b/Chapter14/basic_threading_demo_with_lock.py deleted file mode 100644 index 1833dfc..0000000 --- a/Chapter14/basic_threading_demo_with_lock.py +++ /dev/null @@ -1,34 +0,0 @@ -import tkinter as tk -from threading import Thread, Lock -from time import sleep - -print_lock = Lock() - -def print_slowly(string): - #print_lock.acquire() - with print_lock: - words = string.split() - for word in words: - sleep(1) - print(word) - #print_lock.release() - -class App(tk.Tk): - - def __init__(self): - super().__init__() - self.text = tk.StringVar() - tk.Entry(self, textvariable=self.text).pack() - tk.Button(self, text="Run unthreaded", - command=self.print_unthreaded).pack() - tk.Button(self, text="Run threaded", - command=self.print_threaded).pack() - - def print_unthreaded(self): - print_slowly(self.text.get()) - - def print_threaded(self): - thread = Thread(target=print_slowly, args=(self.text.get(),)) - thread.start() - -App().mainloop() diff --git a/Chapter14/sample_http_server.py b/Chapter14/sample_http_server.py deleted file mode 100644 index d1c90c2..0000000 --- a/Chapter14/sample_http_server.py +++ /dev/null @@ -1,35 +0,0 @@ -from http.server import HTTPServer, BaseHTTPRequestHandler -from time import sleep - -class TestHandler(BaseHTTPRequestHandler): - - def _print_request_data(self): - content_length = self.headers['Content-Length'] - print("Content-length: {}".format(content_length)) - data = self.rfile.read(int(content_length)) - print(data.decode('utf-8')) - - def _send_200(self): - self.send_response(200) - self.send_header('Content-type', 'text/html') - self.end_headers() - - def do_POST(self, *args, **kwargs): - print('POST request received') - self._print_request_data() - sleep(2) - self._send_200() - - def do_PUT(self, *args, **kwargs): - print("PUT request received") - self._print_request_data() - sleep(10) - self._send_200() - - -def run(server_class=HTTPServer, handler_class=TestHandler): - server_address = ('', 8000) - httpd = server_class(server_address, handler_class) - httpd.serve_forever() - -run() diff --git a/Chapter14/sample_rest_service/README.txt b/Chapter14/sample_rest_service/README.txt deleted file mode 100644 index 232ff05..0000000 --- a/Chapter14/sample_rest_service/README.txt +++ /dev/null @@ -1,9 +0,0 @@ -This sample REST service script requires the Flask library, which can be installed using pip: - -$ pip install --user flask - -To run it, execute this in a terminal: - -$ python sample_rest_service.py - -Note that it will only be available on the local system; you cannot connect to it from another host. diff --git a/Chapter14/sample_rest_service/sample_rest_service.py b/Chapter14/sample_rest_service/sample_rest_service.py deleted file mode 100644 index cad2f15..0000000 --- a/Chapter14/sample_rest_service/sample_rest_service.py +++ /dev/null @@ -1,95 +0,0 @@ -"""Test REST server - - -This is a simple test REST service implemented in flask -for ABQ Data Entry. It provides 3 endpoints: - -- /auth for authenticating -- /upload for uploading a file -- /files for downloading a file - -/files can respond to HEAD requests to simply check the file's -existence and size. -""" - -import sys -from pathlib import Path -from time import sleep - -try: - import flask as f -except ImportError: - print( - 'This script requires the Flask library. ' - 'You can install this using the command: pip3 install --user flask' - ) - sys.exit() - -app = f.Flask(__name__) -app.secret_key = '12345' - -##################### -# Wrapper functions # -##################### - -def make_error(status_code, message): - """Create error response with JSON body""" - response = f.jsonify({ - 'status': status_code, - 'message': message - }) - response.status_code = status_code - return response - -############# -# Endpoints # -############# - -@app.route('/auth', methods=['POST']) -def auth(): - """Authenticate the user and set a session cookie""" - username = f.request.form.get('username') - password = f.request.form.get('password') - if username == 'test' and password == 'test': - f.session['authenticated'] = True - return f.jsonify({'message': 'Success'}) - return make_error(401, 'The provided credentials were not accepted.') - -@app.route('/files', methods=['PUT']) -def upload(): - """Endpoint for file upload""" - if not f.session.get('authenticated'): - return make_error(403, 'Access is forbidden') - filedata = f.request.files.get('file') - for t in range(20): - sleep(1) - pct = t * 5 - print(f'File {pct}% uploaded') - print(f'Uploaded {filedata.filename}') - filedata.save(filedata.filename) - - return f.jsonify({'message': 'Success'}) - -@app.route('/files/', methods=['GET', 'HEAD']) -def files(filename): - """Endpoint for file download""" - if not f.session.get('authenticated'): - return make_error(403, 'Access is forbidden') - fp = Path(filename) - if not fp.exists(): - return make_error(404, 'File not found') - response = f.Response() - response.headers.add('content-length', fp.stat().st_size) - if f.request.method == 'HEAD': - return response - sleep(30) - response.set_data(fp.read_text()) - return response - - -################## -# Execute script # -################## - -if __name__ == '__main__': - app.run(port=8000) diff --git a/Chapter14/threading_queue_demo.py b/Chapter14/threading_queue_demo.py deleted file mode 100644 index 5a71b0b..0000000 --- a/Chapter14/threading_queue_demo.py +++ /dev/null @@ -1,45 +0,0 @@ -from time import sleep -from threading import Thread -import tkinter as tk -from queue import Queue - - -class Backend(Thread): - - def __init__(self, queue, *args, **kwargs): - super().__init__(*args, **kwargs) - self.queue = queue - - def run(self): - self.queue.put('ready') - for n in range(1, 5): - self.queue.put(f'stage {n}') - print(f'stage {n}') - sleep(2) - self.queue.put('done') - - -class App(tk.Tk): - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.status = tk.StringVar(self, value='ready') - tk.Label(self, textvariable=self.status).pack() - - tk.Button(self, text="Run process", command=self.go).pack() - self.queue = Queue() - - def go(self): - p = Backend(self.queue) - p.start() - self.check_queue() - - def check_queue(self): - msg = '' - while not self.queue.empty(): - msg = self.queue.get() - self.status.set(msg) - if msg != 'done': - self.after(100, self.check_queue) - -App().mainloop() diff --git a/Chapter14/tkinter_threading_fail.py b/Chapter14/tkinter_threading_fail.py deleted file mode 100644 index 72d2c8a..0000000 --- a/Chapter14/tkinter_threading_fail.py +++ /dev/null @@ -1,26 +0,0 @@ -import tkinter as tk -from tkinter.messagebox import showinfo -from threading import Thread -from time import sleep, localtime - -class Window(tk.Toplevel): - - def __init__(self, parent): - super().__init__(parent) - tk.Entry(self, textvariable=parent.variable).pack() - - -class App(tk.Tk): - - def __init__(self, *args, **kwargs): - super().__init__() - self.variable = tk.StringVar(value='hello') - Thread(target=Window, args=(self,)).start() - Thread(target=Window, args=(self,)).start() - Thread(target=Window, args=(self,)).start() - - - -if __name__ == '__main__': - app = App() - app.mainloop() diff --git a/Chapter15/ABQ_Data_Entry/.gitignore b/Chapter15/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter15/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter15/ABQ_Data_Entry/README.rst b/Chapter15/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter15/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry.py b/Chapter15/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index a3b3a0d..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,4 +0,0 @@ -from abq_data_entry.application import Application - -app = Application() -app.mainloop() diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index cc5d137..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,518 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog -from tkinter import font -import platform -from queue import Queue - -from . import views as v -from . import models as m -from .mainmenu import get_main_menu_for_os -from . import images - - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # move here for ch12 because we need some settings data to authenticate - self.settings_model = m.SettingsModel() - self._load_settings() - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - # chapter14: use after() here to eliminate the small window - # that flashes up breifly - self.after(250, self.deiconify) - - # Create model - # remove for ch12 - # self.model = m.CSVModel() - - self.inserted_rows = [] - self.updated_rows = [] - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Set taskbar icon - self.taskbar_icon = tk.PhotoImage(file=images.ABQ_LOGO_64) - self.call('wm', 'iconphoto', self._w, self.taskbar_icon) - - # Create the menu - #menu = MainMenu(self, self.settings) - menu_class = get_main_menu_for_os(platform.system()) - menu = menu_class(self, self.settings) - - self.config(menu=menu) - event_callbacks = { - '<>': lambda _: self.quit(), - '<>': self._show_recordlist, - '<>': self._new_record, - '<>': self._update_weather_data, - '<>': self._upload_to_corporate_rest, - '<>': self._upload_to_corporate_sftp, - '<>': self.show_growth_chart, - '<>': self.show_yield_chart - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - # new for ch9 - self.logo = tk.PhotoImage(file=images.ABQ_LOGO_32) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16), - image=self.logo, - compound=tk.LEFT - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform_icon = tk.PhotoImage(file=images.FORM_ICON) - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.notebook.add( - self.recordform, text='Entry Form', - image=self.recordform_icon, compound=tk.LEFT - ) - self.recordform.bind('<>', self._on_save) - - - # The data record list - self.recordlist_icon = tk.PhotoImage(file=images.LIST_ICON) - self.recordlist = v.RecordList(self) - - self.notebook.insert( - 0, self.recordlist, text='Records', - image=self.recordlist_icon, compound=tk.LEFT - ) - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rowkey = self.recordform.current_record - self.model.save_record(data, rowkey) - if rowkey is not None: - self.updated_rows.append(rowkey) - else: - rowkey = (data['Date'], data['Time'], data['Lab'], data['Plot']) - self.inserted_rows.append(rowkey) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - -# Remove for ch12 -# def _on_file_select(self, *_): -# """Handle the file->select action""" -# -# filename = filedialog.asksaveasfilename( -# title='Select the target file for saving records', -# defaultextension='.csv', -# filetypes=[('CSV', '*.csv *.CSV')] -# ) -# if filename: -# self.model = m.CSVModel(filename=filename) -# self.inserted_rows.clear() -# self.updated_rows.clear() -# self._populate_recordlist() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - # new ch12 - def _database_login(self, username, password): - """Try to login to the database and create self.model""" - db_host = self.settings['db_host'].get() - db_name = self.settings['db_name'].get() - try: - self.model = m.SQLModel( - db_host, db_name, username, password) - except m.pg.OperationalError as e: - print(e) - return False - return True - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._database_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - # update font settings after loading them - self._set_font() - self.settings['font size'].trace_add('write', self._set_font) - self.settings['font family'].trace_add('write', self._set_font) - - # process theme - style = ttk.Style() - theme = self.settings.get('theme').get() - if theme in style.theme_names(): - style.theme_use(theme) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None, None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the Record selected recordlist id in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - return - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) - - # new chapter 9 - def _set_font(self, *_): - """Set the application's font""" - font_size = self.settings['font size'].get() - font_family = self.settings['font family'].get() - font_names = ('TkDefaultFont', 'TkMenuFont', 'TkTextFont') - for font_name in font_names: - tk_font = font.nametofont(font_name) - tk_font.config(size=font_size, family=font_family) - - # new chapter 13 - def _update_weather_data(self, *_): - """Initiate retrieval and storage of weather data""" - weather_data_model = m.WeatherDataModel( - self.settings['weather_station'].get() - ) - try: - weather_data = weather_data_model.get_weather_data() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem retrieving weather data', - detail=str(e) - ) - self.status.set('Problem retrieving weather data') - else: - self.model.add_weather_data(weather_data) - time = weather_data['observation_time_rfc822'] - self.status.set(f"Weather data recorded for {time}") - - def _create_csv_extract(self): - csvmodel = m.CSVModel() - records = self.model.get_all_records() - if not records: - raise Exception('No records were found to build a CSV file.') - for record in records: - csvmodel.save_record(record) - return csvmodel.file - - - def _upload_to_corporate_sftp(self, *_): - - # create csv file - try: - csvfile = self._create_csv_extract() - except Exception as e: - messagebox.showwarning( - title='Error', message=str(e) - ) - return - - # authenticate - d = v.LoginDialog(self, 'Login to ABQ Corporate SFTP') - if d.result is None: - return - username, password = d.result - - # create model - host = self.settings['abq_sftp_host'].get() - port = self.settings['abq_sftp_port'].get() - sftp_model = m.SFTPModel(host, port) - try: - sftp_model.authenticate(username, password) - except Exception as e: - messagebox.showerror('Error Authenticating', str(e)) - return - - # check destination file - destination_dir = self.settings['abq_sftp_path'].get() - destination_path = f'{destination_dir}/{csvfile.name}' - - try: - exists = sftp_model.check_file(destination_path) - except Exception as e: - messagebox.showerror( - f'Error checking file {destination_path}', - str(e) - ) - return - if exists: - # ask if we should overwrite - overwrite = messagebox.askyesno( - 'File exists', - f'The file {destination_path} already exists on the server, ' - 'do you want to overwrite it?' - ) - if not overwrite: - # ask if we should download it - download = messagebox.askyesno( - 'Download file', - 'Do you want to download the file to inspect it?' - ) - if download: - # get a destination filename and save - filename = filedialog.asksaveasfilename() - if not filename: - return - try: - sftp_model.get_file(destination_path, filename) - except Exception as e: - messagebox.showerror('Error downloading', str(e)) - return - messagebox.showinfo( - 'Download Complete', 'Download Complete.' - ) - return - # if we haven't returned, the user wants to upload - try: - sftp_model.upload_file(csvfile, destination_path) - except Exception as e: - messagebox.showerror('Error uploading', str(e)) - else: - messagebox.showinfo( - 'Success', - f'{csvfile} successfully uploaded to SFTP server.' - ) - - def _upload_to_corporate_rest(self, *_): - - # create csv file - try: - csvfile = self._create_csv_extract() - except Exception as e: - messagebox.showwarning( - title='Error', message=str(e) - ) - return - - # Authenticate to the rest server - d = v.LoginDialog( - self, 'Login to ABQ Corporate REST API' - ) - if d.result is not None: - username, password = d.result - else: - return - - # create REST model - rest_model = m.CorporateRestModel( - self.settings['abq_rest_url'].get() - ) - try: - rest_model.authenticate(username, password) - except Exception as e: - messagebox.showerror('Error authenticating', str(e)) - return - - # Check if the file exists - try: - exists = rest_model.check_file(csvfile.name) - except Exception as e: - messagebox.showerror('Error checking for file', str(e)) - return - - if exists: - # ask if we should overwrite - overwrite = messagebox.askyesno( - 'File exists', - f'The file {csvfile.name} already exists on the server, ' - 'do you want to overwrite it?' - ) - if not overwrite: - # ask if we should download it - download = messagebox.askyesno( - 'Download file', - 'Do you want to download the file to inspect it?' - ) - if download: - # get a destination filename and save - filename = filedialog.asksaveasfilename() - if not filename: - return - try: - data = rest_model.get_file(csvfile.name) - except Exception as e: - messagebox.showerror('Error downloading', str(e)) - return - with open(filename, 'w', encoding='utf-8') as fh: - fh.write(data) - messagebox.showinfo( - 'Download Complete', 'Download Complete.' - ) - return - # if we haven't returned, the user wants to upload - rest_model.upload_file(csvfile) - self._check_queue(rest_model.queue) - - - def _check_queue(self, queue): - while not queue.empty(): - item = queue.get() - if item.status == 'done': - messagebox.showinfo( - item.status, - message=item.subject, - detail=item.body - ) - self.status.set(item.subject) - return - elif item.status == 'error': - messagebox.showerror( - item.status, - message=item.subject, - detail=item.body - ) - self.status.set(item.subject) - return - else: - self.status.set(f'{item.subject}: {item.body}') - self.after(100, self._check_queue, queue) - - #New for ch15 - def show_growth_chart(self, *_): - data = self.model.get_growth_by_lab() - popup = tk.Toplevel() - chart = v.LineChartView( - popup, data, (800, 400), - 'Day', 'Avg Height (cm)', 'lab_id' - ) - chart.pack(fill='both', expand=1) - - def show_yield_chart(self, *_): - popup = tk.Toplevel() - chart = v.YieldChartView( - popup, - 'Average plot humidity', 'Average plot temperature', - 'Yield as a product of humidity and temperature' - ) - chart.pack(fill='both', expand=True) - data = self.model.get_yield_by_plot() - seed_colors = { - 'AXM477': 'red', 'AXM478': 'yellow', - 'AXM479': 'green', 'AXM480': 'blue' - } - for seed, color in seed_colors.items(): - seed_data = [ - (x['avg_humidity'], x['avg_temperature'], x['yield']) - for x in data if x['seed_sample'] == seed - ] - chart.draw_scatter(seed_data, color, seed) diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/__init__.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/__init__.py deleted file mode 100644 index 57538d9..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from pathlib import Path - -# This gives us the parent directory of this file (__init__.py) -IMAGE_DIRECTORY = Path(__file__).parent - -ABQ_LOGO_16 = IMAGE_DIRECTORY / 'abq_logo-16x10.png' -ABQ_LOGO_32 = IMAGE_DIRECTORY / 'abq_logo-32x20.png' -ABQ_LOGO_64 = IMAGE_DIRECTORY / 'abq_logo-64x40.png' - -# PNG icons - -SAVE_ICON = IMAGE_DIRECTORY / 'file-2x.png' -RESET_ICON = IMAGE_DIRECTORY / 'reload-2x.png' -LIST_ICON = IMAGE_DIRECTORY / 'list-2x.png' -FORM_ICON = IMAGE_DIRECTORY / 'browser-2x.png' - - -# BMP icons -QUIT_BMP = IMAGE_DIRECTORY / 'x-2x.xbm' -ABOUT_BMP = IMAGE_DIRECTORY / 'question-mark-2x.xbm' diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png deleted file mode 100644 index 255f273..0000000 Binary files a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png and /dev/null differ diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png deleted file mode 100644 index 650add1..0000000 Binary files a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png and /dev/null differ diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png deleted file mode 100644 index be9458f..0000000 Binary files a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png and /dev/null differ diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png deleted file mode 100644 index 2a6efb0..0000000 Binary files a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png and /dev/null differ diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/file-2x.png b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/file-2x.png deleted file mode 100644 index 4196c44..0000000 Binary files a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/file-2x.png and /dev/null differ diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/list-2x.png b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/list-2x.png deleted file mode 100644 index 1fc4450..0000000 Binary files a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/list-2x.png and /dev/null differ diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm deleted file mode 100644 index 8981c9b..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define question_mark_2x_width 16 -#define question_mark_2x_height 16 -static unsigned char question_mark_2x_bits[] = { - 0xc0, 0x0f, 0xe0, 0x1f, 0x70, 0x38, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x18, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03 }; diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png deleted file mode 100644 index 2a79f16..0000000 Binary files a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png and /dev/null differ diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm b/Chapter15/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm deleted file mode 100644 index 940af96..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define x_2x_width 16 -#define x_2x_height 16 -static unsigned char x_2x_bits[] = { - 0x04, 0x10, 0x0e, 0x38, 0x1f, 0x7c, 0x3e, 0x7e, 0x7c, 0x3f, 0xf8, 0x1f, - 0xf0, 0x0f, 0xe0, 0x07, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0x7e, 0x3e, - 0x3f, 0x7c, 0x1e, 0x78, 0x0c, 0x30, 0x00, 0x00 }; diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index f0a0ad8..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,420 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import font - -from . import images - -class GenericMainMenu(tk.Menu): - """The Application's main menu""" - - accelerators = { - 'file_open': 'Ctrl+O', - 'quit': 'Ctrl+Q', - 'record_list': 'Ctrl+L', - 'new_record': 'Ctrl+R', - } - - keybinds = { - '': '<>', - '': '<>', - '': '<>', - '': '<>' - } - - styles = {} - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def _create_icons(self): - - # must be done in a method because PhotoImage can't be created - # until there is a Tk instance. - # There isn't one when the class is defined, but there is when - # the instance is created. - self.icons = { - # 'file_open': tk.PhotoImage(file=images.SAVE_ICON), - 'record_list': tk.PhotoImage(file=images.LIST_ICON), - 'new_record': tk.PhotoImage(file=images.FORM_ICON), - 'quit': tk.BitmapImage(file=images.QUIT_BMP, foreground='red'), - 'about': tk.BitmapImage( - file=images.ABOUT_BMP, foreground='#CC0', background='#A09' - ), - } - - def _add_file_open(self, menu): - - menu.add_command( - label='Select file…', command=self._event('<>'), - image=self.icons.get('file'), compound=tk.LEFT - ) - - def _add_quit(self, menu): - menu.add_command( - label='Quit', command=self._event('<>'), - image=self.icons.get('quit'), compound=tk.LEFT - ) - - def _add_weather_download(self, menu): - menu.add_command( - label="Update Weather Data", - command=self._event('<>'), - ) - - def _add_rest_upload(self, menu): - menu.add_command( - label="Upload CSV to corporate REST", - command=self._event('<>'), - ) - - def _add_sftp_upload(self, menu): - menu.add_command( - label="Upload CSV to corporate SFTP", - command=self._event('<>'), - ) - - def _add_autofill_date(self, menu): - menu.add_checkbutton( - label='Autofill Date', variable=self.settings['autofill date'] - ) - - def _add_autofill_sheet(self, menu): - menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - def _add_font_size_menu(self, menu): - font_size_menu = tk.Menu(self, tearoff=False, **self.styles) - for size in range(6, 17, 1): - font_size_menu.add_radiobutton( - label=size, value=size, - variable=self.settings['font size'] - ) - menu.add_cascade(label='Font size', menu=font_size_menu) - - def _add_font_family_menu(self, menu): - font_family_menu = tk.Menu(self, tearoff=False, **self.styles) - for family in font.families(): - font_family_menu.add_radiobutton( - label=family, value=family, - variable=self.settings['font family'] - ) - menu.add_cascade(label='Font family', menu=font_family_menu) - - def _add_themes_menu(self, menu): - style = ttk.Style() - themes_menu = tk.Menu(self, tearoff=False, **self.styles) - for theme in style.theme_names(): - themes_menu.add_radiobutton( - label=theme, value=theme, - variable=self.settings['theme'] - ) - menu.add_cascade(label='Theme', menu=themes_menu) - self.settings['theme'].trace_add('write', self._on_theme_change) - - def _add_go_record_list(self, menu): - menu.add_command( - label="Record List", command=self._event('<>'), - image=self.icons.get('record_list'), compound=tk.LEFT - ) - - def _add_go_new_record(self, menu): - menu.add_command( - label="New Record", command=self._event('<>'), - image=self.icons.get('new_record'), compound=tk.LEFT - ) - - def _add_about(self, menu): - menu.add_command( - label='About…', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _add_growth_chart(self, menu): - menu.add_command( - label='Show Growth Chart', command=self._event('<>') - ) - - def _add_yield_chart(self, menu): - menu.add_command( - label='Show Yield Chart', command=self._event('<>') - ) - - def _build_menu(self): - # The file menu - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) - #self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - self._add_growth_chart(self._menus['Tools']) - self._add_yield_chart(self._menus['Tools']) - - # The options menu - self._menus['Options'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Options']) - self._add_autofill_sheet(self._menus['Options']) - self._add_font_size_menu(self._menus['Options']) - self._add_font_family_menu(self._menus['Options']) - self._add_themes_menu(self._menus['Options']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self.add_cascade(label='Help', menu=self._menus['Help']) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - self.configure(**self.styles) - - def __init__(self, parent, settings, **kwargs): - super().__init__(parent, **kwargs) - self.settings = settings - self._create_icons() - self._menus = dict() - self._build_menu() - self._bind_accelerators() - self.configure(**self.styles) - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo( - title='About', message=about_message, detail=about_detail - ) - @staticmethod - def _on_theme_change(*_): - """Popup a message about theme changes""" - message = "Change requires restart" - detail = ( - "Theme changes do not take effect" - " until application restart" - ) - messagebox.showwarning( - title='Warning', - message=message, - detail=detail - ) - - def _bind_accelerators(self): - - for key, sequence in self.keybinds.items(): - self.bind_all(key, self._event(sequence)) - -class WindowsMainMenu(GenericMainMenu): - """ - Changes: - - Windows uses file->exit instead of file->quit, - and no accelerator is used. - - Windows can handle commands on the menubar, so - put 'Record List' / 'New Record' on the bar - - Windows can't handle icons on the menu bar, though - - Put 'options' under 'Tools' with separator - """ - - def _create_icons(self): - super()._create_icons() - del(self.icons['new_record']) - del(self.icons['record_list']) - - def __init__(self, *args, **kwargs): - del(self.keybinds['']) - super().__init__(*args, **kwargs) - - def _add_quit(self, menu): - menu.add_command( - label='Exit', - command=self._event('<>'), - image=self.icons.get('quit'), - compound=tk.LEFT - ) - - def _build_menu(self): - # File Menu - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Tools']) - self._add_autofill_sheet(self._menus['Tools']) - self._add_font_size_menu(self._menus['Tools']) - self._add_font_family_menu(self._menus['Tools']) - self._add_themes_menu(self._menus['Tools']) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - self._add_growth_chart(self._menus['Tools']) - self._add_yield_chart(self._menus['Tools']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False) - self._add_about(self._menus['Help']) - - # Build main menu - self.add_cascade(label='File', menu=self._menus['File']) - self.add_cascade(label='Tools', menu=self._menus['Tools']) - self._add_go_record_list(self) - self._add_go_new_record(self) - self.add_cascade(label='Help', menu=self._menus['Help']) - - -class LinuxMainMenu(GenericMainMenu): - """Differences for Linux: - - - Edit menu for autofill options - - View menu for font & theme options - - Use color theme for menu - """ - styles = { - 'background': '#333', - 'foreground': 'white', - 'activebackground': '#777', - 'activeforeground': 'white', - 'relief': tk.GROOVE - } - - - def _build_menu(self): - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The edit menu - self._menus['Edit'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - self._add_growth_chart(self._menus['Tools']) - self._add_yield_chart(self._menus['Tools']) - - - # The View menu - self._menus['View'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -class MacOsMainMenu(GenericMainMenu): - """ - Differences for MacOS: - - - Create App Menu - - Move about to app menu, remove 'help' - - Remove redundant quit command - - Change accelerators to Command-[] - - Add View menu for font & theme options - - Add Edit menu for autofill options - - Add Window menu for navigation commands - """ - keybinds = { - '': '<>', - '': '<>', - '': '<>' - } - accelerators = { - 'file_open': 'Cmd-O', - 'record_list': 'Cmd-L', - 'new_record': 'Cmd-R', - } - - def _add_about(self, menu): - menu.add_command( - label='About ABQ Data Entry', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - self._menus['ABQ Data Entry'] = tk.Menu( - self, tearoff=False, - name='apple' - ) - self._add_about(self._menus['ABQ Data Entry']) - self._menus['ABQ Data Entry'].add_separator() - - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - - self._menus['Edit'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - self._add_growth_chart(self._menus['Tools']) - self._add_yield_chart(self._menus['Tools']) - - # View menu - self._menus['View'] = tk.Menu(self, tearoff=False) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # Window Menu - self._menus['Window'] = tk.Menu(self, name='window', tearoff=False) - self._add_go_record_list(self._menus['Window']) - self._add_go_new_record(self._menus['Window']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -def get_main_menu_for_os(os_name): - """Return the menu class appropriate to the given OS""" - menus = { - 'Linux': LinuxMainMenu, - 'Darwin': MacOsMainMenu, - 'freebsd7': LinuxMainMenu, - 'Windows': WindowsMainMenu - } - - return menus.get(os_name, GenericMainMenu) diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index 9fa4db4..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,578 +0,0 @@ -import csv -from pathlib import Path -import os -import json -import platform -from datetime import datetime -from urllib.request import urlopen -from xml.etree import ElementTree -import requests -import paramiko -from threading import Thread, Lock -from queue import Queue -from collections import namedtuple - -import psycopg2 as pg -from psycopg2.extras import DictCursor - -from .constants import FieldTypes as FT - -Message = namedtuple('Message', ['status', 'subject', 'body']) - -class SQLModel: - """Data Model for SQL data storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string_list, - 'values': []}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': []}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': []}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - lc_update_query = ( - 'UPDATE lab_checks SET lab_tech_id = ' - '(SELECT id FROM lab_techs WHERE name = %(Technician)s) ' - 'WHERE date=%(Date)s AND time=%(Time)s AND lab_id=%(Lab)s' - ) - - lc_insert_query = ( - 'INSERT INTO lab_checks VALUES (%(Date)s, %(Time)s, %(Lab)s, ' - '(SELECT id FROM lab_techs WHERE name LIKE %(Technician)s))' - ) - - pc_update_query = ( - 'UPDATE plot_checks SET date=%(Date)s, time=%(Time)s, ' - 'lab_id=%(Lab)s, plot=%(Plot)s, seed_sample = %(Seed Sample)s, ' - 'humidity = %(Humidity)s, light = %(Light)s, ' - 'temperature = %(Temperature)s, ' - 'equipment_fault = %(Equipment Fault)s, ' - 'blossoms = %(Blossoms)s, plants = %(Plants)s, ' - 'fruit = %(Fruit)s, max_height = %(Max Height)s, ' - 'min_height = %(Min Height)s, median_height = %(Med Height)s, ' - 'notes = %(Notes)s WHERE date=%(key_date)s AND time=%(key_time)s ' - 'AND lab_id=%(key_lab)s AND plot=%(key_plot)s') - - pc_insert_query = ( - 'INSERT INTO plot_checks VALUES (%(Date)s, %(Time)s, %(Lab)s,' - ' %(Plot)s, %(Seed Sample)s, %(Humidity)s, %(Light)s,' - ' %(Temperature)s, %(Equipment Fault)s, %(Blossoms)s, %(Plants)s,' - ' %(Fruit)s, %(Max Height)s, %(Min Height)s,' - ' %(Med Height)s, %(Notes)s)') - - def __init__(self, host, database, user, password): - self.connection = pg.connect(host=host, database=database, - user=user, password=password, cursor_factory=DictCursor) - - techs = self.query("SELECT name FROM lab_techs ORDER BY name") - labs = self.query("SELECT id FROM labs ORDER BY id") - plots = self.query("SELECT DISTINCT plot FROM plots ORDER BY plot") - self.fields['Technician']['values'] = [x['name'] for x in techs] - self.fields['Lab']['values'] = [x['id'] for x in labs] - self.fields['Plot']['values'] = [str(x['plot']) for x in plots] - - def query(self, query, parameters=None): - with self.connection: - with self.connection.cursor() as cursor: - cursor.execute(query, parameters) - # cursor.description is None when - # no rows are returned - if cursor.description is not None: - return cursor.fetchall() - - def get_all_records(self, all_dates=False): - """Return all records. - - By default, only return today's records, unless - all_dates is True. - """ - query = ('SELECT * FROM data_record_view ' - 'WHERE %(all_dates)s OR "Date" = CURRENT_DATE ' - 'ORDER BY "Date" DESC, "Time", "Lab", "Plot"') - return self.query(query, {'all_dates': all_dates}) - - def get_record(self, rowkey): - """Return a single record - - rowkey must be a tuple of date, time, lab, and plot - """ - date, time, lab, plot = rowkey - query = ( - 'SELECT * FROM data_record_view ' - 'WHERE "Date" = %(date)s AND "Time" = %(time)s ' - 'AND "Lab" = %(lab)s AND "Plot" = %(plot)s') - result = self.query( - query, - {"date": date, "time": time, "lab": lab, "plot": plot} - ) - return result[0] if result else dict() - - def save_record(self, record, rowkey): - """Save a record to the database - - rowkey must be a tuple of date, time, lab, and plot. - Or None if this is a new record. - """ - if rowkey: - key_date, key_time, key_lab, key_plot = rowkey - record.update({ - "key_date": key_date, - "key_time": key_time, - "key_lab": key_lab, - "key_plot": key_plot - }) - - # Lab check is based on the entered date/time/lab - if self.get_lab_check( - record['Date'], record['Time'], record['Lab'] - ): - lc_query = self.lc_update_query - else: - lc_query = self.lc_insert_query - # Plot check is based on the key values - if rowkey: - pc_query = self.pc_update_query - else: - pc_query = self.pc_insert_query - - self.query(lc_query, record) - self.query(pc_query, record) - - def get_lab_check(self, date, time, lab): - """Retrieve the lab check record for the given date, time, and lab""" - query = ('SELECT date, time, lab_id, lab_tech_id, ' - 'lt.name as lab_tech FROM lab_checks JOIN lab_techs lt ' - 'ON lab_checks.lab_tech_id = lt.id WHERE ' - 'lab_id = %(lab)s AND date = %(date)s AND time = %(time)s') - results = self.query( - query, {'date': date, 'time': time, 'lab': lab}) - return results[0] if results else dict() - - def get_current_seed_sample(self, lab, plot): - """Get the seed sample currently planted in the given lab and plot""" - result = self.query('SELECT current_seed_sample FROM plots ' - 'WHERE lab_id=%(lab)s AND plot=%(plot)s', - {'lab': lab, 'plot': plot}) - return result[0]['current_seed_sample'] if result else '' - - def add_weather_data(self, data): - query = ( - 'INSERT INTO local_weather VALUES ' - '(%(observation_time_rfc822)s, %(temp_c)s, ' - '%(relative_humidity)s, %(pressure_mb)s, ' - '%(weather)s)' - ) - try: - self.query(query, data) - except pg.IntegrityError: - # already have weather for this datetime - pass - - # new ch15 - def get_growth_by_lab(self): - query = ( - 'SELECT date - (SELECT min(date) FROM plot_checks) AS "Day", ' - 'lab_id, avg(median_height) AS "Avg Height (cm)" FROM plot_checks ' - 'GROUP BY date, lab_id ORDER BY "Day", lab_id;' - ) - return self.query(query) - - def get_yield_by_plot(self): - query = ( - 'SELECT seed_sample, MAX(fruit) AS yield, ' - 'AVG(humidity) AS avg_humidity, ' - 'AVG(temperature) AS avg_temperature ' - 'FROM plot_checks WHERE NOT equipment_fault ' - 'GROUP BY lab_id, plot, seed_sample' - ) - return self.query(query) - - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data, rownum=None): - """Save a dict of data to the CSV file""" - - if rownum is None: - # This is a new record - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - else: - # This is an update - records = self.get_all_records() - records[rownum] = data - with open(self.file, 'w', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - csvwriter.writeheader() - csvwriter.writerows(records) - - def get_all_records(self): - """Read in all records from the CSV and return a list""" - if not self.file.exists(): - return [] - - with open(self.file, 'r', encoding='utf-8') as fh: - # Casting to list is necessary for unit tests to work - csvreader = csv.DictReader(fh) - missing_fields = set(self.fields.keys()) - set(csvreader.fieldnames) - if len(missing_fields) > 0: - fields_string = ', '.join(missing_fields) - raise Exception( - f"File is missing fields: {fields_string}" - ) - records = list(csvreader) - - # Correct issue with boolean fields - trues = ('true', 'yes', '1') - bool_fields = [ - key for key, meta - in self.fields.items() - if meta['type'] == FT.boolean - ] - for record in records: - for key in bool_fields: - record[key] = record[key].lower() in trues - return records - - def get_record(self, rownum): - """Get a single record by row number - - Callling code should catch IndexError - in case of a bad rownum. - """ - - return self.get_all_records()[rownum] - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'}, - 'db_host': {'type': 'str', 'value': 'localhost'}, - 'db_name': {'type': 'str', 'value': 'abq'}, - 'weather_station': {'type': 'str', 'value': 'KBMG'}, - 'abq_rest_url': { - 'type': 'str', - 'value': 'http://localhost:8000/' - }, - 'abq_sftp_host': {'type': 'str', 'value': 'localhost'}, - 'abq_sftp_port': {'type': 'int', 'value': 22}, - 'abq_sftp_path': {'type': 'str', 'value': 'ABQ/BLTN_IN'} - } - - config_dirs = { - "Linux": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - "freebsd7": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - 'Darwin': Path.home() / 'Library' / 'Application Support', - 'Windows': Path.home() / 'AppData' / 'Local' - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - filedir = self.config_dirs.get(platform.system(), Path.home()) - self.filepath = filedir / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - json_string = json.dumps(self.fields) - with open(self.filepath, 'w', encoding='utf-8') as fh: - fh.write(json_string) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.loads(fh.read()) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value - -class WeatherDataModel: - - base_url = 'http://w1.weather.gov/xml/current_obs/%7B%7D.xml' - - def __init__(self, station): - self.url = self.base_url.format(station) - - - def get_weather_data(self): - response = urlopen(self.url) - - xmlroot = ElementTree.fromstring(response.read()) - weatherdata = { - 'observation_time_rfc822': None, - 'temp_c': None, - 'relative_humidity': None, - 'pressure_mb': None, - 'weather': None - } - - for tag in weatherdata: - element = xmlroot.find(tag) - if element is not None: - weatherdata[tag] = element.text - - return weatherdata - - - -class ThreadedUploader(Thread): - - upload_lock = Lock() - - def __init__(self, session_cookie, files_url, filepath, queue): - super().__init__() - self.files_url = files_url - self.filepath = filepath - self.session = requests.Session() - self.session.cookies['session'] = session_cookie - self.queue = queue - - - def run(self, *args, **kwargs): - self.queue.put( - Message( - 'info', 'Upload Started', - f'Begin upload of {self.filepath}' - ) - ) - - with self.upload_lock: - with open(self.filepath, 'rb') as fh: - files = {'file': fh} - response = self.session.put( - self.files_url, files=files - ) - try: - response.raise_for_status() - except Exception as e: - self.queue.put(Message('error', 'Upload Error', str(e))) - else: - self.queue.put( - Message( - 'done', - 'Upload Succeeded', - f'Upload of {self.filepath} to REST succeeded' - ) - ) - - -class CorporateRestModel: - - def __init__(self, base_url): - - self.auth_url = f'{base_url}/auth' - self.files_url = f'{base_url}/files' - self.session = requests.session() - self.queue = Queue() - - @staticmethod - def _raise_for_status(response): - try: - response.raise_for_status() - except requests.HTTPError: - raise Exception(response.json().get('message')) - - def authenticate(self, username, password): - """Authenticate to the server""" - response = self.session.post( - self.auth_url, - data={'username': username, 'password': password} - ) - self._raise_for_status(response) - - def check_file(self, filename): - """See if a file exists on the server""" - url = f"{self.files_url}/{filename}" - response = self.session.head(url) - if response.status_code == 200: - return True - elif response.status_code == 404: - return False - self._raise_for_status(response) - - def get_file(self, filename): - """Download a file from the server""" - url = f"{self.files_url}/{filename}" - response = self.session.get(url) - self._raise_for_status(response) - return response.text - - def upload_file(self, filepath): - """PUT a file on the server""" - cookie = self.session.cookies.get('session') - uploader = ThreadedUploader( - cookie, self.files_url, filepath, self.queue - ) - uploader.start() - -class SFTPModel: - - def __init__(self, host, port=22): - self.host = host - self.port = port - - # setup SSHClient - self._client = paramiko.SSHClient() - self._client.set_missing_host_key_policy( - paramiko.AutoAddPolicy() - ) - self._client.load_system_host_keys() - - - def authenticate(self, username, password): - try: - self._client.connect( - self.host, username=username, - password=password, port=self.port - ) - except paramiko.AuthenticationException: - raise Exception( - 'The username and password were not accepted by the server.' - ) - - def _check_auth(self): - transport = self._client.get_transport() - if not transport.is_active() and transport.is_authenticated(): - raise Exception('Not connected to a server.') - - - def check_file(self, remote_path): - """Check if the file at remote_path exists""" - self._check_auth() - sftp = self._client.open_sftp() - try: - sftp.stat(remote_path) - except FileNotFoundError: - return False - return True - - def upload_file(self, local_path, remote_path): - """Upload file at local_path to remote_path - - Both paths must include a filename - """ - self._check_auth() - sftp = self._client.open_sftp() - - # Create the dstination path if it doesn't exist - remote_path = Path(remote_path) - for directory in remote_path.parent.parts: - if directory not in sftp.listdir(): - sftp.mkdir(directory) - sftp.chdir(directory) - # copy the file - # just use filename because our CWD should - # be the full path without the name - sftp.put(local_path, remote_path.name) - - def get_file(self, remote_path, local_path): - self._check_auth() - sftp = self._client.open_sftp() - sftp.get(remote_path, local_path) diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/network.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/network.py deleted file mode 100644 index 0bf3a4b..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/network.py +++ /dev/null @@ -1,149 +0,0 @@ -from urllib.request import urlopen -from xml.etree import ElementTree -import requests -import ftplib as ftp -from os import path -from threading import Thread -from collections import namedtuple - -Message = namedtuple('Message', ['status', 'subject', 'body']) - - -def get_local_weather(station): - """Retrieve local weather data from the web - - Returns a dictionary containing: - - observation_time_rfc822: timestamp of observation in rfc822 format - - temp_c: The temperature in degrees C - - relative_humidity: Relative Humidity percentage - - pressure_mb: Air pressure in mb - - weather: A string describing weather conditions - """ - url = f'http://w1.weather.gov/xml/current_obs/%7Bstation%7D.xml' - response = urlopen(url) - - xmlroot = ElementTree.fromstring(response.read()) - weatherdata = { - 'observation_time_rfc822': None, - 'temp_c': None, - 'relative_humidity': None, - 'pressure_mb': None, - 'weather': None - } - - for tag in weatherdata: - element = xmlroot.find(tag) - if element is not None: - weatherdata[tag] = element.text - - return weatherdata - - -def upload_to_corporate_rest( - filepath, upload_url, auth_url, - username, password): - """Upload a file to the corporate server using REST""" - - session = requests.session() - - response = session.post( - auth_url, - data={'username': username, 'password': password} - ) - response.raise_for_status() - - files = {'file': open(filepath, 'rb')} - response = session.put( - upload_url, - files=files - ) - files['file'].close() - response.raise_for_status() - - -def upload_to_corporate_ftp( - filepath, ftp_host, - ftp_port, ftp_user, ftp_pass): - """Upload a file to the corporate server using FTP""" - - with ftp.FTP() as ftp_cx: - # connect and login - ftp_cx.connect(ftp_host, ftp_port) - ftp_cx.login(ftp_user, ftp_pass) - - # upload file - filename = path.basename(filepath) - - with open(filepath, 'rb') as fh: - ftp_cx.storbinary('STOR {}'.format(filename), fh) - -class CorporateRestUploaderNoQueue(Thread): - - def __init__(self, filepath, upload_url, auth_url, - username, password): - self.filepath = filepath - self.upload_url = upload_url - self.auth_url = auth_url - self.username = username - self.password = password - super().__init__() - - def run(self, *args, **kwargs): - session = requests.session() - data = {'username': self.username, 'password': self.password} - response = session.post(self.auth_url, data=data) - response.raise_for_status() - files = {'file': open(self.filepath, 'rb')} - response = session.put( - self.upload_url, - files=files - ) - files['file'].close() - response.raise_for_status() - -class CorporateRestUploader(Thread): - - def __init__( - self, filepath, upload_url, auth_url, - username, password, queue - ): - self.filepath = filepath - self.upload_url = upload_url - self.auth_url = auth_url - self.username = username - self.password = password - self.queue = queue - super().__init__() - - def _putmessage(self, status, subject, body): - self.queue.put(Message(status, subject, body)) - - def run(self, *args, **kwargs): - session = requests.session() - self._putmessage( - 'info', 'Authenticating', - f'Authenticating to {self.auth_url} as {self.username}' - ) - data = {'username': self.username, 'password': self.password} - try: - response = session.post(self.auth_url,data=data) - response.raise_for_status() - except Exception as e: - self._putmessage('error', 'Authentication Failure', str(e)) - return - self._putmessage( - 'info', 'Starting Upload', - f'Starting upload of {self.upload_url} to {self.filepath}' - ) - files = {'file': open(self.filepath, 'rb')} - try: - response = session.put(self.upload_url, files=files) - files['file'].close() - response.raise_for_status() - except Exception as e: - self._putmessage('error', "Upload Failure", str(e)) - return - self._putmessage( - 'done', 'Complete', - f'File {self.filepath} uploaded to ABQ REST' - ) diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/test/__init__.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/test/test_application.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/test/test_application.py deleted file mode 100644 index 73cc7b4..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/test/test_application.py +++ /dev/null @@ -1,72 +0,0 @@ -from unittest import TestCase -from unittest.mock import patch -from .. import application - - -class TestApplication(TestCase): - records = [ - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '1', 'Seed Sample': 'AX477', - 'Humidity': '24.09', 'Light': '1.03', 'Temperature': '22.01', - 'Equipment Fault': False, 'Plants': '9', 'Blossoms': '21', - 'Fruit': '3', 'Max Height': '8.7', 'Med Height': '2.73', - 'Min Height': '1.67', 'Notes': '\n\n', - }, - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '2', 'Seed Sample': 'AX478', - 'Humidity': '24.47', 'Light': '1.01', 'Temperature': '21.44', - 'Equipment Fault': False, 'Plants': '14', 'Blossoms': '27', - 'Fruit': '1', 'Max Height': '9.2', 'Med Height': '5.09', - 'Min Height': '2.35', 'Notes': '' - } - ] - - settings = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'} - } - - def setUp(self): - # can be parenthesized in python 3.10+ - with \ - patch('abq_data_entry.application.m.CSVModel') as csvmodel,\ - patch('abq_data_entry.application.m.SettingsModel') as settingsmodel,\ - patch('abq_data_entry.application.Application._show_login') as show_login,\ - patch('abq_data_entry.application.v.DataRecordForm'),\ - patch('abq_data_entry.application.v.RecordList'),\ - patch('abq_data_entry.application.ttk.Notebook'),\ - patch('abq_data_entry.application.get_main_menu_for_os')\ - : - - settingsmodel().fields = self.settings - csvmodel().get_all_records.return_value = self.records - show_login.return_value = True - self.app = application.Application() - - def tearDown(self): - self.app.update() - self.app.destroy() - - def test_show_recordlist(self): - self.app._show_recordlist() - self.app.update() - self.app.notebook.select.assert_called_with(self.app.recordlist) - - def test_populate_recordlist(self): - # test correct functions - self.app._populate_recordlist() - self.app.model.get_all_records.assert_called() - self.app.recordlist.populate.assert_called_with(self.records) - - # test exceptions - - self.app.model.get_all_records.side_effect = Exception('Test message') - with patch('abq_data_entry.application.messagebox'): - self.app._populate_recordlist() - application.messagebox.showerror.assert_called_with( - title='Error', message='Problem reading file', - detail='Test message' - ) diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/test/test_models.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/test/test_models.py deleted file mode 100644 index 0cb1baf..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/test/test_models.py +++ /dev/null @@ -1,137 +0,0 @@ -from .. import models -from unittest import TestCase -from unittest import mock - -from pathlib import Path - -class TestCSVModel(TestCase): - - def setUp(self): - - self.file1_open = mock.mock_open( - read_data=( - "Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light," - "Temperature,Equipment Fault,Plants,Blossoms,Fruit,Min Height," - "Max Height,Med Height,Notes\r\n" - "2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,14," - "27,1,2.35,9.2,5.09,\r\n" - "2021-06-01,8:00,J Simms,A,3,AX479,24.15,1,20.82,False,18,49," - "6,2.47,14.2,11.83,\r\n")) - self.file2_open = mock.mock_open(read_data='') - - self.model1 = models.CSVModel('file1') - self.model2 = models.CSVModel('file2') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_all_records(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - records = self.model1.get_all_records() - - self.assertEqual(len(records), 2) - self.assertIsInstance(records, list) - self.assertIsInstance(records[0], dict) - - fields = ( - 'Date', 'Time', 'Technician', 'Lab', 'Plot', - 'Seed Sample', 'Humidity', 'Light', - 'Temperature', 'Equipment Fault', 'Plants', - 'Blossoms', 'Fruit', 'Min Height', 'Max Height', - 'Med Height', 'Notes') - - for field in fields: - self.assertIn(field, records[0].keys()) - - # testing boolean conversion - self.assertFalse(records[0]['Equipment Fault']) - - self.file1_open.assert_called_with( - Path('file1'), 'r', encoding='utf-8' - ) - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_record(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - record0 = self.model1.get_record(0) - record1 = self.model1.get_record(1) - - self.assertNotEqual(record0, record1) - self.assertEqual(record0['Date'], '2021-06-01') - self.assertEqual(record1['Plot'], '3') - self.assertEqual(record0['Med Height'], '5.09') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_save_record(self, mock_path_exists): - - record = { - "Date": '2021-07-01', "Time": '12:00', - "Technician": 'Test Technician', "Lab": 'E', - "Plot": '17', "Seed Sample": 'test sample', - "Humidity": '10', "Light": '99', - "Temperature": '20', "Equipment Fault": False, - "Plants": '10', "Blossoms": '200', - "Fruit": '250', "Min Height": '40', - "Max Height": '50', "Med Height": '55', - "Notes": 'Test Note\r\nTest Note\r\n' - } - record_as_csv = ( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - - # test appending a file - mock_path_exists.return_value = True - - # test insert - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - self.file2_open.assert_called_with( - Path('file2'), 'a', encoding='utf-8' - ) - file2_handle = self.file2_open() - file2_handle.write.assert_called_with(record_as_csv) - - # test update - with mock.patch('abq_data_entry.models.open', self.file1_open): - self.model1.save_record(record, 1) - self.file1_open.assert_called_with( - Path('file1'), 'w', encoding='utf-8' - ) - file1_handle = self.file1_open() - file1_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call( - '2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,' - '14,27,1,2.35,9.2,5.09,\r\n'), - mock.call( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - ]) - - # test new file - mock_path_exists.return_value = False - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - file2_handle = self.file2_open() - file2_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call(record_as_csv) - ]) - with self.assertRaises(IndexError): - self.model2.save_record(record, 2) diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py deleted file mode 100644 index e796eb8..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py +++ /dev/null @@ -1,219 +0,0 @@ -from .. import widgets -from unittest import TestCase -from unittest.mock import Mock -import tkinter as tk -from tkinter import ttk - - -class TkTestCase(TestCase): - """A test case designed for Tkinter widgets and views""" - - keysyms = { - '-': 'minus', - ' ': 'space', - ':': 'colon', - # For more see http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm - } - @classmethod - def setUpClass(cls): - cls.root = tk.Tk() - cls.root.wait_visibility() - - @classmethod - def tearDownClass(cls): - cls.root.update() - cls.root.destroy() - - def type_in_widget(self, widget, string): - widget.focus_force() - for char in string: - char = self.keysyms.get(char, char) - self.root.update() - widget.event_generate(''.format(char)) - self.root.update() - - def click_on_widget(self, widget, x, y, button=1): - widget.focus_force() - self.root.update() - widget.event_generate("".format(button), x=x, y=y) - self.root.update() - - -class TestValidatedMixin(TkTestCase): - - def setUp(self): - class TestClass(widgets.ValidatedMixin, ttk.Entry): - pass - self.vw1 = TestClass(self.root) - - def assertEndsWith(self, text, ending): - if not text.endswith(ending): - raise AssertionError( - "'{}' does not end with '{}'".format(text, ending) - ) - - def test_init(self): - - # check error var setup - self.assertIsInstance(self.vw1.error, tk.StringVar) - - # check validation config - self.assertEqual(self.vw1.cget('validate'), 'all') - self.assertEndsWith( - self.vw1.cget('validatecommand'), - '%P %s %S %V %i %d' - ) - self.assertEndsWith( - self.vw1.cget('invalidcommand'), - '%P %s %S %V %i %d' - ) - - def test__validate(self): - - # by default, _validate should return true - args = { - 'proposed': 'abc', - 'current': 'ab', - 'char': 'c', - 'event': 'key', - 'index': '2', - 'action': '1' - } - # test key validate routing - self.assertTrue( - self.vw1._validate(**args) - ) - fake_key_val = Mock(return_value=False) - self.vw1._key_validate = fake_key_val - self.assertFalse( - self.vw1._validate(**args) - ) - fake_key_val.assert_called_with(**args) - - # test focusout validate routing - args['event'] = 'focusout' - self.assertTrue(self.vw1._validate(**args)) - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - self.assertFalse(self.vw1._validate(**args)) - fake_focusout_val.assert_called_with(event='focusout') - - - def test_trigger_focusout_validation(self): - - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - fake_focusout_invalid = Mock() - self.vw1._focusout_invalid = fake_focusout_invalid - - val = self.vw1.trigger_focusout_validation() - self.assertFalse(val) - fake_focusout_val.assert_called_with(event='focusout') - fake_focusout_invalid.assert_called_with(event='focusout') - - -class TestValidatedSpinbox(TkTestCase): - - def setUp(self): - self.value = tk.DoubleVar() - self.vsb = widgets.ValidatedSpinbox( - self.root, - textvariable=self.value, - from_=-10, to=10, increment=1 - ) - self.vsb.pack() - self.vsb.wait_visibility() - - def tearDown(self): - self.vsb.destroy() - - def key_validate(self, new, current=''): - return self.vsb._key_validate( - new, # inserted char - 'end', # position to insert - current, # current value - current + new, # proposed value - '1' # action code (1 == insert) - ) - - def click_arrow(self, arrow='inc', times=1): - x = self.vsb.winfo_width() - 5 - y = 5 if arrow == 'inc' else 15 - for _ in range(times): - self.click_on_widget(self.vsb, x=x, y=y) - - def test__key_validate(self): - ################### - # Unit-test Style # - ################### - - # test valid input - for x in range(10): - x = str(x) - p_valid = self.vsb._key_validate(x, 'end', '', x, '1') - n_valid = self.vsb._key_validate(x, 'end', '-', '-' + x, '1') - self.assertTrue(p_valid) - self.assertTrue(n_valid) - - # test letters - valid = self.key_validate('a') - self.assertFalse(valid) - - # test non-increment number - valid = self.key_validate('1', '0.') - self.assertFalse(valid) - - # test too high number - valid = self.key_validate('0', '10') - self.assertFalse(valid) - - def test__key_validate_integration(self): - ########################## - # Integration test style # - ########################## - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '10') - self.assertEqual(self.vsb.get(), '10') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, 'abcdef') - self.assertEqual(self.vsb.get(), '') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '200') - self.assertEqual(self.vsb.get(), '2') - - def test__focusout_validate(self): - - # test valid - for x in range(10): - self.value.set(x) - posvalid = self.vsb._focusout_validate() - self.value.set(-x) - negvalid = self.vsb._focusout_validate() - - self.assertTrue(posvalid) - self.assertTrue(negvalid) - - # test too low - self.value.set('-200') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - # test invalid number - self.vsb.delete(0, 'end') - self.vsb.insert('end', '-a2-.3') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - def test_arrows(self): - self.value.set(0) - self.click_arrow(times=1) - self.assertEqual(self.vsb.get(), '1') - - self.click_arrow(times=5) - self.assertEqual(self.vsb.get(), '6') - - self.click_arrow(arrow='dec', times=1) - self.assertEqual(self.vsb.get(), '5') diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index 32a2ea2..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,708 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT -from . import images - -# new ch15 -import matplotlib -matplotlib.use('TkAgg') -from matplotlib.figure import Figure -from matplotlib.backends.backend_tkagg import ( - FigureCanvasTkAgg, - NavigationToolbar2Tk -) - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, style='', cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - if style: - frame.configure(style=style) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # new for ch9 - style = ttk.Style() - - # Frame styles - style.configure( - 'RecordInfo.TLabelframe', - background='khaki', padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe', background='lightblue', - padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe', - background='lightgreen', padx=10, pady=10 - ) - # Style the label Element as well - style.configure( - 'RecordInfo.TLabelframe.Label', background='khaki', - padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe.Label', - background='lightblue', padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe.Label', - background='lightgreen', padx=10, pady=10 - ) - - # Style for the form labels and buttons - style.configure('RecordInfo.TLabel', background='khaki') - style.configure('RecordInfo.TRadiobutton', background='khaki') - style.configure('EnvironmentInfo.TLabel', background='lightblue') - style.configure( - 'EnvironmentInfo.TCheckbutton', - background='lightblue' - ) - style.configure('PlantInfo.TLabel', background='lightgreen') - - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # new chapter 8 - # variable to track current record id - self.current_record = None - - # Label for displaying what record we're editing - self.record_label = ttk.Label(self) - self.record_label.grid(row=0, column=0) - - # Record info section - r_info = self._add_frame( - "Record Information", 'RecordInfo.TLabelframe' - ) - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=1) - # swap order for chapter 12 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - label_args={'style': 'RecordInfo.TLabel'}, - input_args={'style': 'RecordInfo.TRadiobutton'} - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame( - "Environment Data", 'EnvironmentInfo.TLabelframe' - ) - - e_info = ttk.LabelFrame( - self, - text="Environment Data", - style='EnvironmentInfo.TLabelframe' - ) - e_info.grid(row=2, column=0, sticky="we") - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - disable_var=self._vars['Equipment Fault'], - var=self._vars['Temperature'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'}, - input_args={'style': 'EnvironmentInfo.TCheckbutton'} - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data", 'PlantInfo.TLabelframe') - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=2) - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={"max_var": max_height_var, - "focus_update_var": min_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={"min_var": min_height_var, - "focus_update_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={"min_var": min_height_var, - "max_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=2) - - - # Notes section -- Update grid row value for ch8 - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=4, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=5) - self.save_button_logo = tk.PhotoImage(file=images.SAVE_ICON) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save, - image=self.save_button_logo, compound=tk.LEFT - ) - self.savebutton.pack(side=tk.RIGHT) - - self.reset_button_logo = tk.PhotoImage(file=images.RESET_ICON) - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset, - image=self.reset_button_logo, compound=tk.LEFT - ) - self.resetbutton.pack(side=tk.RIGHT) - - # new for ch12 - # Triggers - for field in ('Lab', 'Plot'): - self._vars[field].trace_add( - 'write', self._populate_current_seed_sample) - - for field in ('Date', 'Time', 'Lab'): - self._vars[field].trace_add( - 'write', self._populate_tech_for_lab_check) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - # rewrite for ch12 - def load_record(self, rowkey, data=None): - """Load a record's data into the form""" - self.current_record = rowkey - if rowkey is None: - self.reset() - self.record_label.config(text='New Record') - else: - date, time, lab, plot = rowkey - title = f'Record for Lab {lab}, Plot {plot} at {date} {time}' - self.record_label.config(text=title) - for key, var in self._vars.items(): - var.set(data.get(key, '')) - try: - var.label_widget.input.trigger_focusout_validation() - except AttributeError: - pass - - # new for ch12 - - def _populate_current_seed_sample(self, *_): - """Auto-populate the current seed sample for Lab and Plot""" - if not self.settings['autofill sheet data'].get(): - return - plot = self._vars['Plot'].get() - lab = self._vars['Lab'].get() - - if plot and lab: - seed = self.model.get_current_seed_sample(lab, plot) - self._vars['Seed Sample'].set(seed) - - def _populate_tech_for_lab_check(self, *_): - """Populate technician based on the current lab check""" - if not self.settings['autofill sheet data'].get(): - return - date = self._vars['Date'].get() - try: - datetime.fromisoformat(date) - except ValueError: - return - time = self._vars['Time'].get() - lab = self._vars['Lab'].get() - - if all([date, time, lab]): - check = self.model.get_lab_check(date, time, lab) - tech = check['lab_tech'] if check else '' - self._vars['Technician'].set(tech) - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) - - -class RecordList(tk.Frame): - """Display for CSV file contents""" - - column_defs = { - '#0': {'label': 'Row', 'anchor': tk.W}, - 'Date': {'label': 'Date', 'width': 150, 'stretch': True}, - 'Time': {'label': 'Time'}, - 'Lab': {'label': 'Lab', 'width': 40}, - 'Plot': {'label': 'Plot', 'width': 80} - } - default_width = 100 - default_minwidth = 10 - default_anchor = tk.CENTER - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self._inserted = list() - self._updated = list() - self.columnconfigure(0, weight=1) - self.rowconfigure(0, weight=1) - - # New ch12 - self.iid_map = dict() - - # create treeview - self.treeview = ttk.Treeview( - self, - columns=list(self.column_defs.keys())[1:], - selectmode='browse' - ) - self.treeview.grid(row=0, column=0, sticky='NSEW') - - # Configure treeview columns - for name, definition in self.column_defs.items(): - label = definition.get('label', '') - anchor = definition.get('anchor', self.default_anchor) - minwidth = definition.get('minwidth', self.default_minwidth) - width = definition.get('width', self.default_width) - stretch = definition.get('stretch', False) - self.treeview.heading(name, text=label, anchor=anchor) - self.treeview.column( - name, anchor=anchor, minwidth=minwidth, - width=width, stretch=stretch - ) - - self.treeview.bind('', self._on_open_record) - self.treeview.bind('', self._on_open_record) - - # configure scrollbar for the treeview - self.scrollbar = ttk.Scrollbar( - self, - orient=tk.VERTICAL, - command=self.treeview.yview - ) - self.treeview.configure(yscrollcommand=self.scrollbar.set) - self.scrollbar.grid(row=0, column=1, sticky='NSW') - - # configure tagging - self.treeview.tag_configure('inserted', background='lightgreen') - self.treeview.tag_configure('updated', background='lightblue') - - # For ch12, hide first column since row # is no longer meaningful - self.treeview.config(show='headings') - - # new for ch12 - - # update for ch12 - def populate(self, rows): - """Clear the treeview and write the supplied data rows to it.""" - - for row in self.treeview.get_children(): - self.treeview.delete(row) - - self.iid_map.clear() - - cids = list(self.column_defs.keys())[1:] - for rowdata in rows: - values = [rowdata[key] for key in cids] - rowkey = tuple([str(v) for v in values]) - if rowkey in self._inserted: - tag = 'inserted' - elif rowkey in self._updated: - tag = 'updated' - else: - tag = '' - # new ch12 -- save generated IID, assign to rowkey - iid = self.treeview.insert( - '', 'end', values=values, tag=tag) - self.iid_map[iid] = rowkey - - if len(rows) > 0: - firstrow = self.treeview.identify_row(0) - self.treeview.focus_set() - self.treeview.selection_set(firstrow) - self.treeview.focus(firstrow) - - # update for ch12 - def _on_open_record(self, *_): - """Handle record open request""" - self.event_generate('<>') - - @property - def selected_id(self): - selection = self.treeview.selection() - return self.iid_map[selection[0]] if selection else None - - - def add_updated_row(self, row): - if row not in self._updated: - self._updated.append(row) - - def add_inserted_row(self, row): - if row not in self._inserted: - self._inserted.append(row) - - def clear_tags(self): - self._inserted.clear() - self._updated.clear() - - -# New ch15 - -class LineChartView(tk.Canvas): - """A generic view for plotting a line chart""" - - margin = 20 - colors = [ - 'red', 'orange', 'yellow', 'green', - 'blue', 'purple', 'violet', - # add more for more complex plots - ] - - def __init__( - self, parent, data, plot_size, - x_field, y_field, plot_by_field - ): - self.data = data - self.x_field = x_field - self.y_field = y_field - self.plot_by_field = plot_by_field - - # calculate view size - self.plot_width, self.plot_height = plot_size - view_width = self.plot_width + (2 * self.margin) - view_height = self.plot_height + (2 * self.margin) - - super().__init__( - parent, width=view_width, - height=view_height, background='lightgrey' - ) - # Draw chart - self.origin = (self.margin, view_height - self.margin) - # X axis - self.create_line( - self.origin, - (view_width - self.margin, view_height - self.margin) - ) - # Y axis - self.create_line( - self.origin, (self.margin, self.margin), width=2 - ) - # X axis label - self.create_text( - (view_width // 2, view_height - self.margin), - text=x_field, anchor='n' - ) - # Y axis label - self.create_text( - (self.margin, view_height // 2), - text=y_field, angle=90, anchor='s' - ) - self.plot_area = tk.Canvas( - self, background='#555', - width=self.plot_width, height=self.plot_height - ) - self.create_window( - self.origin, window=self.plot_area, anchor='sw' - ) - - # Draw legend and lines - plot_names = sorted(set([ - row[self.plot_by_field] - for row in self.data - ])) - - color_map = list(zip(plot_names, self.colors)) - - for plot_name, color in color_map: - dataxy = [ - (row[x_field], row[y_field]) - for row in data - if row[plot_by_field] == plot_name - ] - self._plot_line(dataxy, color) - - self._draw_legend(color_map) - - - def _plot_line(self, data, color): - """Plot a line described by data in the given color""" - - max_x = max([row[0] for row in data]) - max_y = max([row[1] for row in data]) - x_scale = self.plot_width / max_x - y_scale = self.plot_height / max_y - coords = [ - (round(x * x_scale), self.plot_height - round(y * y_scale)) - for x, y in data - ] - self.plot_area.create_line( - *coords, width=4, fill=color, smooth=True - ) - - def _draw_legend(self, color_map): - # determine legend - for i, (label, color) in enumerate(color_map): - self.plot_area.create_text( - (10, 10 + (i * 20)), - text=label, fill=color, anchor='w' - ) - - -class YieldChartView(tk.Frame): - - def __init__(self, parent, x_axis, y_axis, title): - super().__init__(parent) - self.figure = Figure(figsize=(6, 4), dpi=100) - self.canvas_tkagg = FigureCanvasTkAgg(self.figure, master=self) - canvas = self.canvas_tkagg.get_tk_widget() - canvas.pack(fill='both', expand=True) - self.toolbar = NavigationToolbar2Tk(self.canvas_tkagg, self) - self.axes = self.figure.add_subplot(1, 1, 1) - self.axes.set_xlabel(x_axis) - self.axes.set_ylabel(y_axis) - self.axes.set_title(title) - self.scatters = list() - self.scatter_labels = list() - - def draw_scatter(self, data, color, label): - x, y, size = zip(*data) - scaled_size = [(s ** 2)//2 for s in size] - scatter = self.axes.scatter( - x, y, scaled_size, - c=color, label=label, alpha=0.5 - ) - self.scatters.append(scatter) - self.scatter_labels.append(label) - self.axes.legend(self.scatters, self.scatter_labels) diff --git a/Chapter15/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter15/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index ec72ed4..0000000 --- a/Chapter15/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,441 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - style = ttk.Style() - widget_class = self.winfo_class() - validated_style = 'ValidatedInput.' + widget_class - style.map( - validated_style, - foreground=[('invalid', 'white'), ('!invalid', 'black')], - fieldbackground=[('invalid', 'darkred'), ('!invalid', 'white')] - ) - self.configure(style=validated_style) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - pass - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.input.error = getattr(button, 'error', None) - self.input.trigger_focusout_validation = \ - button._focusout_validate - else: - self.input = input_class(self, **input_args) - - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - error_style = 'Error.' + label_args.get('style', 'TLabel') - ttk.Style().configure(error_style, foreground='darkred') - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error, style=error_style).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter15/ABQ_Data_Entry/docs/Application_layout.png b/Chapter15/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter15/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter15/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter15/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index fec5e84..0000000 --- a/Chapter15/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,97 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - - -Description ------------ -The program is being created to minimize data entry errors for laboratory measurements. - -Functionality Required ----------------------- - -The program must: - -* Provide a UI for reading, updating, and appending data to the CSV file -* allow all relevant, valid data to be entered, as per the field chart -* append entered data to a CSV file - - The CSV file must have a filename of abq_data_record_CURRENTDATE.csv, - where CURRENTDATE is the date of the checks in ISO format (Year-month-day) - - The CSV file must have all the fields as per the chart - -* enforce correct datatypes per field -* have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout -* prevent saving the record when errors are present - -The program should try, whenever possible, to: - -* enforce reasonable limits on data entered -* Auto-fill data -* Suggest likely correct values -* Provide a smooth and efficient workflow - -Functionality Not Required --------------------------- - -The program does not need to: - -* Allow deletion of data. - -Limitations ------------ - -The program must: - -* Be efficiently operable by keyboard-only users. -* Be accessible to color blind users. -* Run on Debian Linux. -* Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+----------+------+------------------+--------------------------+ -|Field | Datatype | Units| Range |Descripton | -+============+==========+======+==================+==========================+ -|Date |Date | | |Date of record | -+------------+----------+------+------------------+--------------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00 | | -+------------+----------+------+------------------+--------------------------+ -|Lab |String | | A - C |Lab ID | -+------------+----------+------+------------------+--------------------------+ -|Technician |String | | |Technician name | -+------------+----------+------+------------------+--------------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+----------+------+------------------+--------------------------+ -|Seed |String | | |Seed sample ID | -|sample | | | | | -+------------+----------+------+------------------+--------------------------+ -|Fault |Bool | | |Fault on environmental | -| | | | |sensor | -+------------+----------+------+------------------+--------------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -+------------+----------+------+------------------+--------------------------+ -|Humidity |Decimal |g/m³ | 0.5 - 52.0 |Abs humidity at plot | -+------------+----------+------+------------------+--------------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -+------------+----------+------+------------------+--------------------------+ -|Blossoms |Int | | 0 - 1000 |Number of blossoms in plot| -+------------+----------+------+------------------+--------------------------+ -|Fruit |Int | | 0 - 1000 |Number of fruits in plot | -+------------+----------+------+------------------+--------------------------+ -|Plants |Int | | 0 - 20 |Number of plants in plot | -+------------+----------+------+------------------+--------------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest plant in| -| | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest plant | -| | | | |in plot | -+------------+----------+------+------------------+--------------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of plants in| -|height | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+----------+------+------------------+--------------------------+ diff --git a/Chapter15/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter15/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter15/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter15/ABQ_Data_Entry/sql/abq_sample_data.sql b/Chapter15/ABQ_Data_Entry/sql/abq_sample_data.sql deleted file mode 100644 index fd4316c..0000000 --- a/Chapter15/ABQ_Data_Entry/sql/abq_sample_data.sql +++ /dev/null @@ -1,1767 +0,0 @@ -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 4291); - - -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 3, 'AXM479', 24.17, 0.97, 21.33, false, 15, 13, 1, 14.20, 1.56, 11.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 7, 'AXM479', 24.25, 0.99, 20.43, false, 2, 6, 0, 11.58, 2.27, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 11, 'AXM479', 24.15, 0.98, 21.06, false, 13, 13, 1, 10.90, 1.90, 6.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 15, 'AXM479', 24.24, 1.01, 22.03, false, 34, 20, 3, 18.16, 1.77, 15.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 19, 'AXM479', 24.43, 1.01, 21.05, false, 11, 11, 1, 19.18, 1.99, 13.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 3, 'AXM479', 24.50, 0.98, 20.91, false, 26, 17, 4, 14.20, 2.19, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 7, 'AXM479', 24.06, 0.98, 20.20, false, 0, 0, 0, 16.36, 2.25, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 11, 'AXM479', 23.97, 1.03, 21.29, false, 10, 11, 0, 16.00, 2.09, 7.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 15, 'AXM479', 23.94, 1.01, 21.33, false, 28, 16, 4, 18.50, 2.21, 18.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 19, 'AXM479', 23.86, 1.02, 20.35, false, 5, 8, 0, 9.86, 1.71, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 3, 'AXM479', 24.42, 1.03, 21.93, false, 39, 14, 0, 14.20, 1.96, 13.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 7, 'AXM479', 23.61, 0.97, 20.21, false, 1, 2, 0, 15.40, 1.68, 2.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 11, 'AXM479', 24.48, 1.00, 20.74, false, 1, 13, 0, 16.04, 1.53, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 15, 'AXM479', 23.93, 1.00, 20.35, false, 32, 18, 2, 17.05, 1.52, 3.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 19, 'AXM479', 23.71, 0.99, 20.48, false, 21, 14, 2, 17.33, 1.65, 11.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 4, 'AXM480', 23.63, 1.03, 21.89, false, 5, 5, 1, 16.27, 2.23, 13.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 2, 'AXM478', 23.62, 1.03, 20.26, false, 34, 17, 5, 9.20, 1.74, 3.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 6, 'AXM478', 23.93, 1.00, 20.59, false, 6, 3, 1, 12.20, 2.21, 4.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 10, 'AXM478', 24.09, 0.98, 20.29, false, 1, 2, 0, 14.27, 1.62, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 14, 'AXM478', 24.35, 1.02, 21.68, false, 9, 12, 0, 13.41, 1.69, 6.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 18, 'AXM478', 23.88, 1.02, 20.26, false, 11, 8, 2, 8.46, 1.85, 6.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 2, 'AXM478', 23.64, 1.02, 21.67, false, 41, 3, 2, 9.20, 1.77, 6.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 6, 'AXM478', 24.49, 1.01, 21.31, false, 30, 17, 3, 18.72, 1.79, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 10, 'AXM478', 23.59, 1.00, 20.98, false, 10, 14, 1, 7.98, 2.03, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 14, 'AXM478', 24.32, 0.97, 20.78, false, 5, 8, 1, 14.82, 1.75, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 18, 'AXM478', 23.61, 1.00, 20.35, false, 33, 18, 1, 14.25, 2.18, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 2, 'AXM478', 24.41, 0.98, 20.17, false, 21, 7, 2, 9.20, 2.01, 3.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 6, 'AXM478', 24.28, 0.99, 20.39, false, 8, 14, 1, 13.58, 1.51, 3.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 10, 'AXM478', 23.57, 1.01, 21.87, false, 21, 19, 1, 13.55, 2.02, 5.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 14, 'AXM478', 24.11, 1.03, 20.44, false, 20, 11, 1, 10.10, 2.49, 5.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 18, 'AXM478', 24.35, 0.99, 20.25, false, 12, 9, 2, 18.41, 1.88, 9.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 8, 'AXM480', 23.59, 1.00, 20.79, false, 27, 20, 0, 16.44, 1.99, 2.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 12, 'AXM480', 23.71, 0.99, 21.00, false, 11, 15, 2, 15.55, 1.99, 5.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 16, 'AXM480', 24.15, 1.01, 20.84, false, 12, 20, 1, 7.59, 2.18, 2.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 20, 'AXM480', 24.13, 1.02, 22.02, false, 5, 11, 1, 7.32, 2.07, 2.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 4, 'AXM480', 24.33, 1.01, 21.08, false, 7, 8, 0, 7.06, 2.32, 5.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 8, 'AXM480', 23.90, 1.03, 22.00, false, 4, 10, 1, 18.24, 2.02, 6.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 12, 'AXM480', 23.75, 1.01, 21.98, false, 6, 5, 1, 17.15, 1.53, 1.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 16, 'AXM480', 23.74, 0.99, 21.92, false, 0, 3, 0, 10.57, 1.59, 3.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 20, 'AXM480', 23.52, 0.99, 21.71, false, 6, 15, 1, 16.82, 1.94, 7.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 4, 'AXM480', 24.24, 0.99, 21.23, false, 19, 15, 2, 17.08, 2.18, 15.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 8, 'AXM480', 24.05, 1.02, 22.00, false, 13, 8, 1, 9.82, 2.38, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 12, 'AXM480', 24.46, 1.02, 21.33, false, 5, 5, 0, 14.71, 1.53, 2.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 16, 'AXM480', 24.39, 0.98, 21.82, false, 20, 10, 1, 11.26, 2.21, 4.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 20, 'AXM480', 23.53, 0.98, 21.34, false, 31, 19, 5, 8.25, 2.16, 8.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 3, 'AXM479', 24.60, 9.81, 24.90, false, 16, 13, 1, 14.36, 1.86, 11.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 7, 'AXM479', 24.32, 10.26, 24.71, false, 3, 7, 0, 11.70, 2.45, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 11, 'AXM479', 26.14, 10.46, 25.26, false, 13, 13, 1, 11.06, 2.08, 6.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 15, 'AXM479', 28.21, 9.97, 24.02, false, 36, 20, 4, 18.19, 1.99, 15.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 19, 'AXM479', 27.14, 9.50, 24.57, false, 11, 11, 2, 19.31, 2.13, 13.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 3, 'AXM479', 26.73, 9.62, 25.51, false, 27, 17, 4, 14.23, 2.50, 4.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 7, 'AXM479', 25.69, 10.31, 25.39, false, 0, 1, 1, 16.37, 2.35, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 11, 'AXM479', 25.82, 9.69, 25.70, false, 11, 11, 1, 16.16, 2.11, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 15, 'AXM479', 24.35, 9.59, 24.79, false, 29, 17, 4, 18.56, 2.49, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 19, 'AXM479', 27.32, 9.88, 25.64, false, 5, 8, 0, 9.92, 2.08, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 3, 'AXM479', 27.97, 10.29, 24.38, false, 41, 15, 1, 14.30, 2.09, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 7, 'AXM479', 23.70, 9.71, 24.53, false, 1, 2, 0, 15.44, 1.75, 2.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 3, 'AXM479', 28.34, 8.96, 26.08, false, 27, 18, 5, 14.30, 2.67, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 6, 'AXM478', 24.90, 10.22, 24.35, false, 7, 3, 2, 12.31, 2.44, 4.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 10, 'AXM478', 25.80, 9.67, 25.46, false, 2, 2, 0, 14.47, 1.87, 4.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 14, 'AXM478', 26.70, 10.39, 24.78, false, 10, 13, 1, 13.59, 1.73, 6.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 18, 'AXM478', 24.88, 9.70, 24.80, false, 13, 8, 2, 8.58, 2.16, 6.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 2, 'AXM478', 24.32, 9.80, 24.26, false, 43, 4, 2, 9.25, 1.79, 7.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 6, 'AXM478', 25.76, 10.28, 24.87, false, 32, 18, 3, 18.90, 2.02, 8.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 10, 'AXM478', 27.36, 10.15, 24.98, false, 10, 15, 1, 8.13, 2.35, 5.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 14, 'AXM478', 27.28, 10.18, 25.21, false, 5, 8, 2, 14.85, 1.85, 14.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 18, 'AXM478', 26.30, 9.83, 24.33, false, 33, 18, 1, 14.34, 2.20, 11.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 2, 'AXM478', 27.09, 10.33, 24.69, false, 23, 8, 3, 9.34, 2.16, 3.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 6, 'AXM478', 25.58, 10.42, 24.64, false, 10, 14, 2, 13.64, 1.88, 3.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 4, 'AXM480', 26.13, 10.30, 24.31, false, 5, 5, 2, 16.35, 2.34, 14.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 8, 'AXM480', 25.54, 10.07, 24.60, false, 28, 20, 1, 16.55, 2.05, 2.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 12, 'AXM480', 26.51, 10.46, 24.94, false, 13, 16, 2, 15.56, 2.10, 5.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 16, 'AXM480', 26.37, 9.64, 24.95, false, 12, 20, 2, 7.78, 2.41, 2.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 20, 'AXM480', 27.08, 10.29, 25.37, false, 6, 11, 1, 7.39, 2.38, 2.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 4, 'AXM480', 26.41, 10.37, 25.76, false, 9, 9, 0, 7.24, 2.48, 5.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 8, 'AXM480', 27.08, 10.36, 24.54, false, 5, 10, 2, 18.39, 2.16, 6.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 12, 'AXM480', 26.62, 9.94, 25.01, false, 6, 6, 2, 17.33, 1.69, 1.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 16, 'AXM480', 24.32, 9.88, 25.22, false, 2, 4, 0, 10.62, 1.76, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 20, 'AXM480', 26.62, 9.60, 25.84, false, 6, 15, 2, 16.84, 2.20, 7.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 4, 'AXM480', 27.93, 9.83, 24.86, false, 19, 16, 3, 17.21, 2.50, 15.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 2, 'AXM478', 24.89, 10.20, 26.01, false, 35, 17, 6, 9.27, 1.86, 3.87, ' -'); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 11, 'AXM479', 26.99, 10.15, 24.59, false, 1, 13, 0, 16.11, 1.68, 6.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 15, 'AXM479', 24.81, 9.90, 24.74, false, 33, 18, 3, 17.25, 1.52, 3.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 19, 'AXM479', 24.36, 10.23, 24.77, false, 23, 14, 2, 17.35, 1.68, 11.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 3, 'AXM479', 25.08, 7.07, 26.30, false, 17, 13, 2, 14.37, 2.12, 11.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 7, 'AXM479', 27.47, 7.79, 27.04, false, 3, 8, 0, 11.76, 2.76, 6.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 11, 'AXM479', 27.57, 7.09, 26.67, false, 15, 13, 2, 11.17, 2.43, 6.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 15, 'AXM479', 28.55, 7.60, 26.72, false, 36, 20, 4, 18.21, 2.04, 15.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 19, 'AXM479', 29.21, 8.04, 27.27, false, 13, 11, 3, 19.35, 2.52, 13.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 12, 'AXM480', 24.90, 10.09, 24.21, false, 7, 6, 1, 14.73, 1.76, 2.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 14, 'AXM478', 26.97, 9.56, 24.88, false, 20, 11, 1, 10.17, 2.62, 5.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 18, 'AXM478', 26.07, 10.43, 26.13, false, 14, 10, 3, 18.51, 1.97, 9.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 2, 'AXM478', 28.49, 8.37, 27.13, false, 35, 18, 6, 9.45, 2.10, 3.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 6, 'AXM478', 27.51, 8.12, 27.27, false, 9, 3, 3, 12.41, 2.79, 4.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 10, 'AXM478', 25.84, 7.47, 26.38, false, 2, 2, 0, 14.52, 1.97, 4.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 14, 'AXM478', 30.34, 8.66, 27.43, false, 10, 13, 2, 13.68, 1.76, 6.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 18, 'AXM478', 28.67, 8.70, 26.29, false, 15, 8, 2, 8.74, 2.40, 6.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 2, 'AXM478', 25.69, 8.10, 26.67, false, 45, 5, 3, 9.27, 1.92, 7.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 16, 'AXM480', 26.95, 10.19, 25.18, false, 22, 11, 2, 11.30, 2.34, 4.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 20, 'AXM480', 26.27, 9.55, 25.52, false, 31, 20, 6, 8.36, 2.29, 8.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 4, 'AXM480', 28.02, 8.94, 26.09, false, 6, 5, 2, 16.40, 2.59, 14.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 8, 'AXM480', 26.49, 8.14, 27.17, false, 30, 20, 2, 16.61, 2.21, 2.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 12, 'AXM480', 29.58, 7.90, 26.45, false, 14, 16, 2, 15.61, 2.40, 5.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 16, 'AXM480', 28.67, 8.84, 26.50, false, 12, 20, 2, 7.81, 2.45, 2.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 20, 'AXM480', 28.86, 7.12, 26.32, false, 8, 11, 1, 7.44, 2.57, 2.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 4, 'AXM480', 29.49, 8.12, 27.13, false, 9, 10, 0, 7.26, 2.78, 5.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 7, 'AXM479', 27.08, 8.63, 26.65, false, 2, 2, 2, 16.40, 2.67, 9.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 11, 'AXM479', 26.49, 7.76, 27.25, false, 13, 12, 1, 16.23, 2.39, 7.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 15, 'AXM479', 27.88, 8.94, 26.70, false, 31, 18, 5, 18.70, 2.78, 18.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 19, 'AXM479', 28.73, 8.17, 26.86, false, 7, 9, 1, 10.12, 2.15, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 3, 'AXM479', 30.64, 7.47, 26.41, false, 42, 16, 1, 14.32, 2.34, 13.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 7, 'AXM479', 26.50, 8.90, 27.56, false, 3, 2, 1, 15.56, 2.13, 2.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 11, 'AXM479', 30.61, 8.32, 26.15, false, 2, 13, 1, 16.26, 1.77, 6.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 15, 'AXM479', 28.69, 8.25, 26.74, false, 33, 18, 3, 17.38, 1.74, 3.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 19, 'AXM479', 27.64, 7.47, 27.00, false, 24, 15, 2, 17.35, 2.05, 11.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 8, 'AXM480', 28.28, 7.58, 26.16, false, 6, 11, 2, 18.42, 2.49, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 6, 'AXM478', 26.94, 8.26, 26.28, false, 32, 18, 4, 19.02, 2.39, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 10, 'AXM478', 28.55, 7.28, 26.04, false, 12, 15, 2, 8.19, 2.72, 5.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 14, 'AXM478', 28.23, 7.88, 26.31, false, 5, 8, 2, 15.01, 2.06, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 18, 'AXM478', 27.63, 7.55, 26.43, false, 34, 18, 2, 14.47, 2.42, 11.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 2, 'AXM478', 29.72, 7.99, 26.29, false, 25, 8, 4, 9.52, 2.34, 3.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 6, 'AXM478', 26.98, 7.53, 26.73, false, 12, 14, 2, 13.82, 1.96, 3.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 10, 'AXM478', 30.35, 8.07, 26.27, false, 23, 20, 3, 13.69, 2.49, 5.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 14, 'AXM478', 30.82, 8.18, 26.60, false, 22, 12, 2, 10.27, 2.63, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 18, 'AXM478', 27.85, 8.15, 27.35, false, 14, 10, 4, 18.64, 2.34, 9.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 12, 'AXM480', 27.93, 7.60, 26.65, false, 7, 7, 3, 17.53, 1.72, 1.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 16, 'AXM480', 28.27, 8.99, 26.20, false, 2, 4, 1, 10.70, 1.98, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 20, 'AXM480', 29.09, 7.07, 26.28, false, 8, 15, 3, 16.91, 2.53, 7.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 4, 'AXM480', 31.17, 7.85, 27.28, false, 20, 17, 4, 17.30, 2.56, 15.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 8, 'AXM480', 29.69, 8.51, 26.15, false, 15, 9, 2, 10.01, 2.88, 7.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 12, 'AXM480', 26.60, 7.60, 27.07, false, 7, 7, 2, 14.88, 1.88, 2.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 16, 'AXM480', 28.32, 7.43, 27.08, false, 23, 11, 3, 11.43, 2.37, 4.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 20, 'AXM480', 28.13, 8.44, 27.03, false, 32, 20, 7, 8.51, 2.33, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 3, 'AXM479', 28.50, 0.50, 22.14, false, 17, 14, 3, 14.37, 2.13, 11.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 7, 'AXM479', 27.54, 0.49, 22.32, false, 4, 9, 0, 11.90, 2.89, 6.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 11, 'AXM479', 29.97, 0.50, 22.36, false, 17, 14, 2, 11.27, 2.44, 6.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 15, 'AXM479', 32.53, 0.53, 22.30, false, 38, 20, 4, 18.25, 2.25, 15.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 19, 'AXM479', 30.55, 0.50, 22.41, false, 13, 12, 4, 19.55, 2.63, 13.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 3, 'AXM479', 32.04, 0.50, 22.06, false, 29, 18, 6, 14.31, 2.73, 4.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 7, 'AXM479', 28.30, 0.50, 22.02, false, 4, 3, 3, 16.59, 2.94, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 11, 'AXM479', 26.56, 0.49, 22.04, false, 15, 13, 2, 16.38, 2.42, 7.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 15, 'AXM479', 28.13, 0.48, 22.44, false, 33, 18, 5, 18.81, 3.05, 18.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 19, 'AXM479', 32.37, 0.47, 22.29, false, 7, 10, 1, 10.13, 2.18, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 3, 'AXM479', 32.17, 0.48, 22.12, false, 44, 16, 2, 14.37, 2.74, 13.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 7, 'AXM479', 27.73, 0.53, 22.39, false, 5, 3, 1, 15.74, 2.33, 2.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 11, 'AXM479', 33.51, 0.53, 22.34, false, 2, 13, 2, 16.32, 1.78, 6.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 15, 'AXM479', 29.20, 0.49, 22.18, false, 34, 19, 3, 17.53, 2.08, 3.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 19, 'AXM479', 30.04, 0.50, 22.16, false, 25, 15, 3, 17.47, 2.42, 11.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 4, 'AXM480', 28.53, 0.50, 22.44, false, 8, 6, 3, 16.55, 2.77, 14.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 2, 'AXM478', 29.31, 0.52, 22.04, false, 37, 19, 6, 9.55, 2.31, 4.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 6, 'AXM478', 30.78, 0.50, 22.46, false, 10, 4, 4, 12.50, 2.89, 4.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 10, 'AXM478', 28.92, 0.53, 22.22, false, 4, 2, 0, 14.69, 2.36, 4.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 14, 'AXM478', 31.60, 0.50, 22.02, false, 10, 14, 2, 13.84, 1.82, 6.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 18, 'AXM478', 30.93, 0.48, 22.13, false, 17, 9, 3, 8.93, 2.45, 6.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 2, 'AXM478', 27.66, 0.51, 22.08, false, 45, 6, 4, 9.35, 2.31, 7.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 6, 'AXM478', 30.75, 0.49, 22.37, false, 33, 18, 5, 19.02, 2.50, 8.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 10, 'AXM478', 31.09, 0.51, 22.21, false, 14, 16, 2, 8.35, 2.91, 5.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 14, 'AXM478', 29.44, 0.48, 22.43, false, 5, 8, 3, 15.06, 2.41, 14.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 18, 'AXM478', 30.94, 0.47, 22.13, false, 34, 19, 2, 14.56, 2.57, 11.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 2, 'AXM478', 32.38, 0.50, 22.02, false, 25, 9, 4, 9.71, 2.59, 3.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 6, 'AXM478', 30.70, 0.51, 22.50, false, 14, 15, 3, 13.83, 2.21, 3.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 10, 'AXM478', 30.48, 0.50, 22.40, false, 23, 20, 3, 13.78, 2.54, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 14, 'AXM478', 33.62, 0.51, 22.47, false, 22, 13, 2, 10.29, 2.63, 5.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 18, 'AXM478', 29.78, 0.52, 22.25, false, 16, 11, 5, 18.83, 2.53, 9.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 8, 'AXM480', 27.64, 0.50, 22.36, false, 31, 20, 2, 16.77, 2.42, 2.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 12, 'AXM480', 32.17, 0.48, 22.34, false, 14, 16, 2, 15.62, 2.72, 5.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 16, 'AXM480', 31.76, 0.49, 22.08, false, 12, 20, 3, 7.90, 2.53, 2.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 20, 'AXM480', 31.28, 0.48, 22.21, false, 9, 12, 1, 7.64, 2.63, 2.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 4, 'AXM480', 30.36, 0.49, 22.45, false, 9, 10, 1, 7.37, 3.03, 5.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 8, 'AXM480', 30.65, 0.49, 22.01, false, 6, 12, 3, 18.51, 2.73, 6.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 12, 'AXM480', 31.68, 0.51, 22.03, false, 8, 7, 4, 17.54, 1.86, 1.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 16, 'AXM480', 30.60, 0.50, 22.49, false, 2, 4, 2, 10.87, 1.98, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 20, 'AXM480', 32.09, 0.49, 22.08, false, 8, 15, 3, 16.91, 2.57, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 4, 'AXM480', 34.09, 0.51, 22.25, false, 21, 18, 5, 17.49, 2.77, 15.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 8, 'AXM480', 31.47, 0.51, 22.14, false, 17, 9, 2, 10.15, 3.14, 7.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 12, 'AXM480', 26.93, 0.51, 22.21, false, 7, 8, 3, 15.07, 1.89, 2.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 16, 'AXM480', 29.29, 0.52, 22.17, false, 23, 12, 3, 11.54, 2.71, 4.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 20, 'AXM480', 29.28, 0.51, 22.40, false, 34, 20, 7, 8.52, 2.58, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 3, 'AXM479', 23.94, 0.99, 20.28, false, 12, 6, 0, 14.20, 2.01, 7.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 7, 'AXM479', 24.36, 1.00, 20.26, false, 16, 20, 2, 11.22, 1.98, 4.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 11, 'AXM479', 23.73, 1.00, 21.94, false, 2, 12, 0, 7.62, 1.82, 5.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 15, 'AXM479', 24.18, 0.99, 21.34, false, 12, 13, 1, 13.33, 2.49, 5.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 19, 'AXM479', 24.29, 1.00, 20.85, false, 7, 8, 0, 18.89, 2.42, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 3, 'AXM479', 23.62, 1.03, 21.57, false, 52, 19, 7, 14.20, 1.67, 9.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 7, 'AXM479', 24.05, 0.98, 21.53, false, 1, 3, 0, 7.80, 2.18, 4.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 11, 'AXM479', 24.24, 0.99, 20.31, false, 5, 11, 1, 7.41, 2.44, 6.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 15, 'AXM479', 24.44, 1.02, 21.18, false, 8, 4, 1, 12.48, 2.41, 11.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 19, 'AXM479', 24.20, 1.01, 20.45, false, 8, 5, 2, 18.34, 2.23, 13.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 3, 'AXM479', 23.60, 1.00, 20.38, false, 28, 13, 5, 14.20, 1.67, 12.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 7, 'AXM479', 24.39, 1.02, 21.37, false, 9, 7, 1, 9.26, 1.60, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 3, 'AXM479', 24.03, 10.11, 24.54, false, 52, 20, 7, 14.22, 2.04, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 2, 'AXM478', 23.56, 1.00, 20.53, false, 12, 16, 2, 9.20, 1.63, 5.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 6, 'AXM478', 23.95, 1.00, 21.06, false, 1, 1, 0, 16.01, 1.68, 9.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 10, 'AXM478', 24.07, 1.02, 21.42, false, 20, 10, 3, 8.26, 1.97, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 14, 'AXM478', 24.45, 0.99, 21.22, false, 8, 7, 1, 11.85, 2.28, 10.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 18, 'AXM478', 23.82, 1.03, 20.78, false, 5, 8, 1, 8.30, 2.09, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 2, 'AXM478', 23.56, 0.97, 21.26, false, 25, 3, 1, 9.20, 1.59, 1.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 6, 'AXM478', 24.06, 0.99, 21.20, false, 21, 19, 4, 17.70, 2.45, 6.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 10, 'AXM478', 23.55, 0.98, 21.23, false, 4, 5, 0, 19.87, 2.28, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 14, 'AXM478', 23.92, 1.00, 20.76, false, 10, 15, 0, 8.03, 2.43, 6.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 18, 'AXM478', 24.14, 1.00, 21.22, false, 5, 4, 0, 11.43, 2.11, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 2, 'AXM478', 24.11, 0.99, 20.74, false, 38, 20, 3, 9.20, 2.23, 8.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 6, 'AXM478', 24.03, 1.00, 21.06, false, 20, 11, 1, 12.88, 1.87, 12.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 4, 'AXM480', 23.84, 0.98, 21.27, false, 33, 19, 4, 10.91, 2.30, 2.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 8, 'AXM480', 23.73, 1.01, 20.62, false, 23, 13, 2, 7.41, 2.06, 2.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 12, 'AXM480', 23.74, 1.02, 21.37, false, 33, 20, 2, 16.64, 1.53, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 16, 'AXM480', 24.32, 0.97, 20.14, false, 19, 19, 3, 8.79, 2.00, 7.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 20, 'AXM480', 23.59, 1.01, 20.33, false, 1, 19, 0, 9.17, 1.52, 7.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 4, 'AXM480', 23.63, 0.97, 21.82, false, 0, 2, 0, 9.72, 1.94, 3.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 8, 'AXM480', 23.58, 1.00, 20.81, false, 20, 19, 2, 8.97, 1.72, 4.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 12, 'AXM480', 23.69, 0.98, 21.60, false, 3, 11, 1, 8.43, 1.86, 5.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 16, 'AXM480', 23.85, 1.02, 21.50, false, 10, 7, 2, 11.72, 2.25, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 20, 'AXM480', 23.53, 1.01, 20.90, false, 9, 7, 0, 7.97, 2.09, 4.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 4, 'AXM480', 23.80, 0.98, 21.01, false, 1, 1, 0, 9.66, 1.77, 2.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 11, 'AXM479', 24.39, 0.99, 21.47, false, 0, 3, 0, 19.84, 2.07, 9.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 15, 'AXM479', 23.85, 1.00, 20.70, false, 4, 14, 1, 10.21, 1.98, 2.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 19, 'AXM479', 24.23, 0.99, 21.86, false, 4, 19, 1, 19.53, 2.21, 4.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 3, 'AXM479', 26.98, 10.11, 25.04, false, 14, 7, 1, 14.26, 2.15, 7.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 7, 'AXM479', 25.91, 10.25, 24.05, false, 16, 20, 2, 11.24, 1.98, 4.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 11, 'AXM479', 24.69, 10.44, 24.02, false, 3, 12, 0, 7.65, 1.85, 5.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 15, 'AXM479', 27.34, 9.78, 25.26, false, 12, 13, 2, 13.38, 2.50, 5.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 19, 'AXM479', 27.36, 10.32, 24.46, false, 8, 8, 0, 19.03, 2.74, 4.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 12, 'AXM480', 23.87, 0.98, 20.07, false, 1, 4, 0, 19.10, 1.69, 2.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 14, 'AXM478', 23.64, 0.99, 20.84, false, 11, 6, 1, 19.11, 1.96, 4.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 18, 'AXM478', 24.25, 0.97, 20.57, false, 6, 12, 0, 8.00, 2.29, 6.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 2, 'AXM478', 26.31, 9.97, 25.34, false, 12, 16, 3, 9.33, 1.67, 5.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 6, 'AXM478', 26.00, 9.87, 25.03, false, 2, 1, 1, 16.08, 1.79, 9.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 10, 'AXM478', 25.19, 9.83, 24.19, false, 20, 10, 3, 8.32, 2.23, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 14, 'AXM478', 28.28, 10.04, 24.38, false, 9, 8, 1, 11.91, 2.52, 10.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 18, 'AXM478', 26.88, 9.78, 25.87, false, 5, 9, 2, 8.48, 2.25, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 2, 'AXM478', 25.18, 10.44, 24.70, false, 25, 4, 1, 9.30, 1.68, 1.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 16, 'AXM480', 24.45, 1.03, 21.50, false, 9, 11, 1, 12.42, 2.28, 8.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 20, 'AXM480', 23.51, 1.01, 20.88, false, 0, 0, 0, 10.18, 1.72, 5.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 4, 'AXM480', 26.36, 9.86, 25.38, false, 34, 20, 5, 10.99, 2.59, 2.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 8, 'AXM480', 23.78, 9.80, 25.39, false, 25, 14, 3, 7.42, 2.08, 2.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 12, 'AXM480', 24.78, 10.26, 26.00, false, 33, 20, 3, 16.81, 1.83, 7.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 16, 'AXM480', 27.38, 9.89, 24.44, false, 19, 19, 3, 8.84, 2.28, 7.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 20, 'AXM480', 24.35, 9.71, 24.93, false, 2, 19, 0, 9.25, 1.63, 7.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 4, 'AXM480', 25.38, 10.43, 24.28, false, 2, 2, 0, 9.83, 2.21, 3.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 7, 'AXM479', 24.06, 10.44, 24.92, false, 1, 3, 0, 7.98, 2.25, 4.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 11, 'AXM479', 28.04, 10.44, 24.91, false, 6, 12, 1, 7.55, 2.44, 6.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 15, 'AXM479', 27.18, 10.21, 24.91, false, 9, 5, 1, 12.62, 2.81, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 19, 'AXM479', 24.93, 9.56, 24.68, false, 9, 5, 2, 18.49, 2.53, 13.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 3, 'AXM479', 26.96, 9.98, 24.62, false, 28, 13, 6, 14.38, 1.80, 12.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 7, 'AXM479', 25.99, 10.11, 25.05, false, 9, 7, 1, 9.36, 1.86, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 11, 'AXM479', 26.16, 10.04, 24.24, false, 2, 3, 0, 20.02, 2.21, 9.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 15, 'AXM479', 27.01, 10.26, 25.58, false, 5, 15, 2, 10.29, 2.26, 2.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 19, 'AXM479', 28.22, 9.77, 24.20, false, 6, 20, 2, 19.66, 2.59, 4.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 8, 'AXM480', 26.23, 9.92, 24.50, false, 20, 19, 2, 9.03, 1.84, 4.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 6, 'AXM478', 26.13, 9.62, 25.23, false, 21, 20, 4, 17.80, 2.84, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 10, 'AXM478', 25.91, 9.96, 24.35, false, 4, 6, 0, 20.00, 2.65, 5.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 14, 'AXM478', 27.87, 9.54, 24.57, false, 11, 15, 1, 8.22, 2.75, 6.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 18, 'AXM478', 25.61, 10.23, 24.28, false, 7, 4, 0, 11.45, 2.16, 6.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 2, 'AXM478', 26.02, 9.58, 25.71, false, 39, 20, 4, 9.27, 2.36, 8.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 6, 'AXM478', 27.24, 10.11, 25.65, false, 21, 12, 2, 13.00, 2.12, 12.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 10, 'AXM478', 26.01, 10.08, 25.45, false, 14, 11, 3, 9.28, 1.75, 2.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 14, 'AXM478', 26.15, 9.70, 25.50, false, 11, 7, 2, 19.29, 2.25, 4.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 18, 'AXM478', 24.84, 10.15, 25.19, false, 8, 13, 1, 8.06, 2.33, 6.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 12, 'AXM480', 24.08, 9.52, 25.29, false, 5, 11, 2, 8.46, 2.19, 5.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 16, 'AXM480', 25.39, 9.98, 24.04, false, 10, 7, 3, 11.86, 2.59, 5.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 20, 'AXM480', 24.07, 10.11, 24.15, false, 10, 8, 1, 8.02, 2.24, 4.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 4, 'AXM480', 25.39, 9.52, 25.61, false, 1, 1, 0, 9.76, 1.89, 2.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 8, 'AXM480', 24.78, 10.23, 26.02, false, 3, 12, 0, 9.76, 2.02, 4.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 12, 'AXM480', 23.95, 10.23, 24.64, false, 2, 5, 1, 19.13, 2.05, 2.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 16, 'AXM480', 26.01, 9.71, 25.85, false, 9, 12, 1, 12.43, 2.62, 8.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 20, 'AXM480', 26.00, 9.95, 25.04, false, 0, 0, 1, 10.24, 1.96, 5.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 3, 'AXM479', 29.52, 8.64, 26.24, false, 14, 7, 2, 14.34, 2.49, 7.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 7, 'AXM479', 28.99, 8.11, 26.89, false, 17, 20, 2, 11.29, 2.27, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 11, 'AXM479', 25.20, 8.28, 26.11, false, 5, 12, 0, 7.77, 1.86, 5.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 15, 'AXM479', 29.08, 8.65, 27.28, false, 13, 14, 3, 13.54, 2.80, 5.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 19, 'AXM479', 28.97, 7.53, 26.15, false, 8, 8, 1, 19.20, 2.91, 4.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 3, 'AXM479', 24.99, 8.69, 26.60, false, 53, 20, 8, 14.27, 2.06, 9.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 7, 'AXM479', 25.59, 8.92, 27.13, false, 2, 4, 0, 8.06, 2.40, 4.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 11, 'AXM479', 30.49, 8.89, 26.90, false, 8, 13, 2, 7.70, 2.77, 6.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 15, 'AXM479', 27.97, 8.18, 26.86, false, 11, 6, 2, 12.75, 3.01, 11.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 19, 'AXM479', 26.77, 8.91, 27.08, false, 11, 6, 2, 18.67, 2.89, 13.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 3, 'AXM479', 28.21, 8.26, 26.74, false, 29, 13, 6, 14.50, 2.20, 12.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 7, 'AXM479', 27.57, 7.04, 26.03, false, 10, 7, 1, 9.47, 2.26, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 11, 'AXM479', 27.57, 8.96, 26.33, false, 2, 3, 1, 20.11, 2.42, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 15, 'AXM479', 29.36, 8.64, 26.39, false, 7, 16, 2, 10.45, 2.63, 2.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 19, 'AXM479', 32.21, 8.67, 26.55, false, 6, 20, 3, 19.68, 2.77, 4.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 4, 'AXM480', 27.51, 8.56, 26.15, false, 34, 20, 5, 11.10, 2.91, 2.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 2, 'AXM478', 29.33, 7.20, 26.71, false, 12, 17, 4, 9.44, 2.05, 5.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 6, 'AXM478', 28.00, 8.93, 26.81, false, 2, 1, 2, 16.28, 1.92, 9.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 10, 'AXM478', 27.24, 7.82, 26.85, false, 22, 10, 4, 8.41, 2.49, 7.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 14, 'AXM478', 29.78, 7.17, 26.90, false, 9, 9, 1, 12.01, 2.81, 10.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 18, 'AXM478', 29.23, 8.20, 27.40, false, 7, 10, 2, 8.58, 2.55, 5.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 2, 'AXM478', 27.46, 8.42, 26.18, false, 25, 4, 1, 9.45, 1.84, 1.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 6, 'AXM478', 27.02, 8.54, 26.57, false, 23, 20, 4, 17.82, 2.96, 6.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 10, 'AXM478', 28.40, 7.75, 26.05, false, 6, 7, 0, 20.16, 3.02, 5.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 14, 'AXM478', 29.13, 7.92, 26.38, false, 12, 16, 1, 8.29, 3.09, 6.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 18, 'AXM478', 27.96, 8.14, 26.80, false, 8, 5, 1, 11.54, 2.26, 6.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 2, 'AXM478', 28.85, 7.20, 27.14, false, 39, 20, 5, 9.33, 2.56, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 6, 'AXM478', 30.73, 8.91, 26.23, false, 21, 13, 2, 13.20, 2.32, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 10, 'AXM478', 26.44, 7.42, 26.01, false, 14, 12, 4, 9.32, 1.83, 2.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 14, 'AXM478', 27.84, 7.06, 26.72, false, 11, 8, 3, 19.29, 2.31, 4.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 18, 'AXM478', 25.73, 8.12, 26.17, false, 9, 14, 2, 8.17, 2.38, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 8, 'AXM480', 25.95, 8.52, 27.41, false, 27, 15, 3, 7.49, 2.14, 2.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 12, 'AXM480', 26.96, 7.62, 26.66, false, 35, 20, 4, 16.90, 2.20, 7.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 16, 'AXM480', 30.54, 8.69, 27.14, false, 20, 20, 3, 9.03, 2.52, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 20, 'AXM480', 26.66, 8.74, 27.69, false, 4, 20, 1, 9.32, 1.74, 7.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 4, 'AXM480', 25.76, 7.58, 26.36, false, 3, 3, 0, 10.00, 2.53, 3.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 8, 'AXM480', 26.62, 7.39, 26.06, false, 20, 20, 2, 9.11, 1.85, 4.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 12, 'AXM480', 26.14, 8.05, 26.64, false, 6, 11, 3, 8.59, 2.26, 5.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 16, 'AXM480', 25.47, 8.06, 27.01, false, 10, 7, 3, 11.88, 2.61, 5.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 20, 'AXM480', 26.97, 7.18, 26.25, false, 10, 9, 1, 8.19, 2.28, 4.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 4, 'AXM480', 25.75, 7.80, 26.31, false, 2, 1, 1, 9.92, 2.27, 2.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 8, 'AXM480', 28.66, 7.80, 26.40, false, 5, 13, 1, 9.79, 2.13, 4.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 12, 'AXM480', 24.82, 8.65, 26.78, false, 4, 5, 2, 19.32, 2.09, 3.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 16, 'AXM480', 28.74, 8.90, 26.72, false, 11, 12, 2, 12.58, 2.73, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 20, 'AXM480', 28.77, 7.83, 26.81, false, 2, 1, 1, 10.42, 2.23, 5.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 3, 'AXM479', 31.95, 0.48, 22.15, false, 15, 8, 3, 14.46, 2.70, 8.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 7, 'AXM479', 30.70, 0.50, 22.43, false, 19, 20, 2, 11.37, 2.51, 4.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 11, 'AXM479', 28.53, 0.51, 22.35, false, 6, 13, 1, 7.93, 2.00, 5.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 15, 'AXM479', 29.44, 0.52, 22.06, false, 15, 14, 3, 13.69, 2.81, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 19, 'AXM479', 29.88, 0.52, 22.04, false, 10, 8, 1, 19.40, 3.18, 4.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 3, 'AXM479', 26.11, 0.48, 22.38, false, 54, 20, 9, 14.28, 2.31, 9.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 7, 'AXM479', 26.14, 0.49, 22.32, false, 3, 5, 0, 8.23, 2.56, 4.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 11, 'AXM479', 33.03, 0.50, 22.36, false, 9, 14, 3, 7.88, 2.99, 6.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 15, 'AXM479', 30.35, 0.48, 22.10, false, 13, 7, 2, 12.90, 3.37, 11.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 19, 'AXM479', 27.35, 0.52, 22.28, false, 11, 7, 3, 18.67, 2.98, 13.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 3, 'AXM479', 28.60, 0.51, 22.19, false, 29, 14, 7, 14.60, 2.31, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 7, 'AXM479', 28.70, 0.51, 22.08, false, 11, 8, 1, 9.59, 2.44, 4.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 3, 'AXM479', 24.01, 0.98, 21.63, false, 58, 17, 0, 13.32, 4.48, 7.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 2, 'AXM478', 33.18, 0.48, 22.02, false, 14, 17, 5, 9.55, 2.20, 5.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 6, 'AXM478', 30.63, 0.49, 22.45, false, 2, 2, 2, 16.31, 2.00, 9.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 10, 'AXM478', 27.68, 0.52, 22.31, false, 22, 10, 4, 8.60, 2.69, 7.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 14, 'AXM478', 29.89, 0.53, 22.10, false, 9, 10, 1, 12.01, 2.93, 10.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 18, 'AXM478', 30.29, 0.47, 22.09, false, 8, 11, 2, 8.67, 2.92, 5.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 2, 'AXM478', 28.78, 0.51, 22.37, false, 25, 5, 2, 9.53, 2.01, 2.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 6, 'AXM478', 30.28, 0.52, 22.53, false, 25, 20, 5, 17.90, 3.02, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 10, 'AXM478', 32.13, 0.51, 22.31, false, 8, 8, 1, 20.18, 3.38, 5.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 14, 'AXM478', 29.51, 0.47, 22.32, false, 12, 16, 2, 8.45, 3.33, 6.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 18, 'AXM478', 29.37, 0.52, 22.06, false, 8, 6, 1, 11.72, 2.62, 6.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 2, 'AXM478', 32.15, 0.51, 22.32, false, 40, 20, 5, 9.35, 2.75, 9.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 6, 'AXM478', 33.20, 0.49, 22.13, false, 22, 14, 3, 13.33, 2.53, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 4, 'AXM480', 30.41, 0.52, 22.02, false, 35, 20, 5, 11.25, 3.11, 3.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 8, 'AXM480', 28.26, 0.51, 22.40, false, 27, 16, 3, 7.54, 2.48, 2.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 12, 'AXM480', 30.24, 0.52, 22.17, false, 36, 20, 4, 16.97, 2.41, 7.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 16, 'AXM480', 31.49, 0.49, 22.32, false, 20, 20, 3, 9.10, 2.71, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 20, 'AXM480', 29.57, 0.52, 22.42, false, 4, 20, 1, 9.39, 1.87, 7.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 4, 'AXM480', 27.95, 0.49, 22.40, false, 4, 3, 0, 10.07, 2.78, 3.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 8, 'AXM480', 29.91, 0.51, 22.40, false, 22, 20, 3, 9.15, 2.05, 4.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 12, 'AXM480', 26.60, 0.51, 22.48, false, 7, 12, 4, 8.75, 2.40, 5.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 16, 'AXM480', 26.76, 0.51, 22.44, false, 12, 7, 3, 11.93, 2.94, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 20, 'AXM480', 30.51, 0.52, 22.15, false, 12, 9, 2, 8.26, 2.42, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 4, 'AXM480', 26.48, 0.51, 22.05, false, 2, 2, 1, 9.94, 2.56, 2.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 11, 'AXM479', 30.49, 0.48, 22.33, false, 4, 4, 1, 20.26, 2.55, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 15, 'AXM479', 32.70, 0.52, 22.01, false, 9, 16, 3, 10.49, 2.65, 2.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 19, 'AXM479', 33.48, 0.51, 22.26, false, 8, 20, 3, 19.86, 2.92, 4.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 3, 'AXM479', 24.27, 1.00, 20.73, false, 41, 20, 1, 18.34, 3.75, 6.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 7, 'AXM479', 23.53, 1.02, 20.02, false, 42, 12, 2, 11.85, 3.72, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 11, 'AXM479', 23.64, 1.03, 21.54, false, 71, 20, 11, 12.60, 3.82, 5.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 15, 'AXM479', 23.59, 1.03, 21.12, false, 17, 5, 1, 16.20, 4.23, 14.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 19, 'AXM479', 24.10, 1.00, 21.42, false, 28, 9, 4, 14.89, 4.24, 8.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 12, 'AXM480', 25.12, 0.49, 22.47, false, 6, 5, 3, 19.41, 2.25, 3.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 14, 'AXM478', 28.62, 0.47, 22.24, false, 12, 8, 3, 19.39, 2.31, 4.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 18, 'AXM478', 26.71, 0.52, 22.09, false, 9, 15, 2, 8.32, 2.70, 6.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 2, 'AXM478', 23.52, 0.99, 20.09, false, 68, 18, 10, 20.04, 3.61, 5.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 6, 'AXM478', 23.79, 1.02, 21.46, false, 43, 17, 3, 13.44, 3.84, 11.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 10, 'AXM478', 23.74, 1.03, 21.59, false, 48, 14, 8, 13.40, 3.64, 9.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 14, 'AXM478', 23.94, 0.97, 20.44, false, 45, 15, 4, 18.27, 4.22, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 18, 'AXM478', 24.01, 1.00, 20.89, false, 40, 19, 8, 16.87, 4.19, 5.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 2, 'AXM478', 24.28, 1.02, 21.40, false, 56, 16, 1, 21.81, 3.78, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 16, 'AXM480', 30.32, 0.47, 22.38, false, 12, 13, 3, 12.74, 2.78, 8.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 20, 'AXM480', 32.52, 0.50, 22.36, false, 2, 1, 2, 10.45, 2.28, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 4, 'AXM480', 23.59, 0.98, 21.81, false, 71, 20, 11, 18.17, 3.60, 5.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 8, 'AXM480', 23.55, 1.01, 21.85, false, 42, 20, 2, 17.56, 4.25, 11.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 12, 'AXM480', 23.53, 0.98, 20.46, false, 55, 14, 2, 21.10, 3.61, 17.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 16, 'AXM480', 23.52, 1.01, 21.97, false, 20, 8, 2, 11.86, 3.53, 10.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 20, 'AXM480', 23.51, 1.02, 21.29, false, 15, 4, 1, 16.11, 4.35, 15.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 4, 'AXM480', 23.62, 0.98, 20.17, false, 50, 14, 5, 9.16, 3.71, 6.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 7, 'AXM479', 24.19, 0.99, 20.59, false, 13, 5, 0, 13.05, 3.86, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 11, 'AXM479', 24.48, 0.97, 21.43, false, 19, 5, 2, 21.13, 4.04, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 15, 'AXM479', 23.67, 1.01, 20.00, false, 28, 11, 4, 10.17, 4.08, 10.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 19, 'AXM479', 23.75, 1.02, 21.17, false, 49, 13, 8, 18.17, 4.49, 17.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 3, 'AXM479', 23.92, 1.01, 20.55, false, 29, 10, 5, 19.46, 3.52, 6.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 7, 'AXM479', 23.60, 0.97, 21.27, false, 22, 9, 0, 10.72, 4.46, 4.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 11, 'AXM479', 23.71, 1.01, 21.98, false, 33, 13, 3, 12.05, 3.56, 11.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 15, 'AXM479', 24.13, 0.98, 21.91, false, 19, 5, 2, 17.63, 3.63, 17.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 19, 'AXM479', 24.32, 1.01, 20.66, false, 12, 4, 2, 21.51, 3.97, 14.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 8, 'AXM480', 23.92, 1.02, 20.72, false, 27, 9, 5, 9.69, 3.63, 3.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 6, 'AXM478', 24.01, 1.00, 20.41, false, 10, 5, 1, 12.19, 4.10, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 10, 'AXM478', 24.08, 1.00, 20.37, false, 50, 14, 9, 13.22, 3.78, 9.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 14, 'AXM478', 24.17, 1.00, 21.24, false, 17, 5, 1, 20.08, 3.93, 8.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 18, 'AXM478', 24.41, 0.99, 21.56, false, 47, 20, 4, 21.55, 4.47, 13.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 2, 'AXM478', 24.11, 1.00, 21.38, false, 51, 16, 7, 21.08, 4.48, 18.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 6, 'AXM478', 24.02, 0.99, 20.42, false, 40, 20, 6, 20.30, 3.56, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 10, 'AXM478', 24.23, 1.00, 20.90, false, 38, 17, 5, 20.66, 3.99, 10.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 14, 'AXM478', 23.62, 1.00, 21.53, false, 57, 18, 3, 17.74, 4.44, 8.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 18, 'AXM478', 23.73, 1.00, 21.90, false, 64, 20, 1, 9.41, 4.38, 4.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 12, 'AXM480', 23.91, 1.00, 20.30, false, 17, 5, 3, 12.44, 4.32, 11.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 16, 'AXM480', 24.32, 1.00, 20.63, false, 57, 20, 10, 9.48, 4.45, 7.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 20, 'AXM480', 23.83, 1.02, 20.53, false, 41, 14, 7, 9.08, 4.13, 7.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 4, 'AXM480', 24.13, 1.02, 20.71, false, 71, 20, 8, 19.35, 3.51, 17.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 8, 'AXM480', 23.61, 1.00, 20.41, false, 31, 13, 5, 14.11, 3.91, 12.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 12, 'AXM480', 23.86, 1.01, 20.76, false, 42, 19, 3, 19.12, 4.13, 7.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 16, 'AXM480', 23.60, 0.99, 20.76, false, 46, 13, 9, 12.69, 4.10, 5.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 20, 'AXM480', 24.10, 1.02, 20.45, false, 61, 20, 7, 19.24, 4.32, 4.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 3, 'AXM479', 24.88, 9.53, 24.93, false, 42, 20, 2, 18.52, 3.79, 6.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 7, 'AXM479', 24.62, 9.85, 25.47, false, 44, 13, 2, 11.96, 3.81, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 11, 'AXM479', 26.30, 10.26, 24.31, false, 73, 20, 12, 12.73, 3.85, 5.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 15, 'AXM479', 25.76, 9.91, 25.00, false, 19, 6, 1, 16.22, 4.27, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 19, 'AXM479', 26.23, 9.84, 25.26, false, 30, 10, 4, 15.06, 4.58, 8.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 3, 'AXM479', 26.28, 10.34, 25.83, false, 58, 17, 0, 13.34, 4.77, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 7, 'AXM479', 25.05, 10.27, 24.77, false, 14, 6, 0, 13.24, 4.12, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 11, 'AXM479', 26.72, 9.55, 25.13, false, 19, 6, 3, 21.28, 4.34, 5.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 15, 'AXM479', 25.70, 9.84, 25.51, false, 29, 11, 5, 10.36, 4.09, 10.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 19, 'AXM479', 27.35, 10.23, 25.46, false, 49, 14, 8, 18.20, 4.74, 17.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 3, 'AXM479', 24.21, 9.91, 24.02, false, 31, 10, 5, 19.60, 3.73, 6.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 7, 'AXM479', 24.96, 10.26, 25.83, false, 22, 9, 0, 10.88, 4.49, 4.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 11, 'AXM479', 27.25, 10.33, 24.56, false, 35, 14, 3, 12.10, 3.82, 11.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 15, 'AXM479', 27.51, 10.32, 25.89, false, 20, 5, 3, 17.78, 3.94, 17.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 19, 'AXM479', 25.94, 9.78, 25.54, false, 13, 4, 2, 21.65, 4.28, 14.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 4, 'AXM480', 24.03, 9.98, 25.34, false, 72, 20, 11, 18.19, 3.87, 5.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 2, 'AXM478', 27.41, 10.07, 24.49, false, 68, 18, 11, 20.11, 3.98, 6.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 6, 'AXM478', 25.34, 9.55, 25.52, false, 43, 17, 4, 13.56, 4.21, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 10, 'AXM478', 23.93, 9.64, 25.75, false, 49, 15, 9, 13.46, 3.85, 9.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 14, 'AXM478', 27.69, 9.54, 25.76, false, 45, 16, 5, 18.44, 4.40, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 18, 'AXM478', 25.70, 10.39, 24.58, false, 40, 20, 8, 16.97, 4.23, 5.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 2, 'AXM478', 25.55, 10.09, 25.54, false, 56, 17, 2, 22.01, 4.06, 15.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 6, 'AXM478', 25.66, 9.64, 24.01, false, 11, 6, 1, 12.32, 4.24, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 10, 'AXM478', 25.47, 10.44, 25.31, false, 50, 15, 9, 13.29, 3.89, 9.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 14, 'AXM478', 25.91, 9.59, 24.66, false, 18, 6, 1, 20.13, 4.28, 8.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 18, 'AXM478', 24.72, 10.25, 24.80, false, 48, 20, 4, 21.60, 4.58, 13.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 2, 'AXM478', 25.20, 9.74, 25.42, false, 53, 17, 7, 21.13, 4.50, 18.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 6, 'AXM478', 25.42, 9.72, 25.36, false, 42, 20, 6, 20.33, 3.90, 9.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 10, 'AXM478', 24.33, 9.79, 25.27, false, 40, 18, 6, 20.73, 4.09, 10.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 14, 'AXM478', 23.81, 10.38, 24.35, false, 57, 18, 4, 17.78, 4.56, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 18, 'AXM478', 24.58, 10.36, 25.78, false, 65, 20, 1, 9.42, 4.54, 4.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 8, 'AXM480', 25.99, 9.67, 24.19, false, 42, 20, 3, 17.74, 4.29, 11.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 12, 'AXM480', 26.47, 10.01, 24.36, false, 56, 15, 3, 21.23, 3.83, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 16, 'AXM480', 27.17, 9.82, 24.08, false, 20, 9, 3, 11.93, 3.62, 10.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 20, 'AXM480', 26.81, 10.44, 25.59, false, 17, 5, 2, 16.29, 4.75, 15.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 4, 'AXM480', 24.26, 10.30, 24.74, false, 51, 14, 6, 9.33, 3.77, 6.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 8, 'AXM480', 24.38, 9.90, 25.88, false, 27, 9, 5, 9.86, 3.86, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 12, 'AXM480', 24.35, 10.49, 24.06, false, 19, 5, 4, 12.57, 4.41, 11.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 16, 'AXM480', 25.75, 10.30, 24.50, false, 58, 20, 10, 9.61, 4.57, 7.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 20, 'AXM480', 26.93, 10.46, 25.07, false, 41, 14, 7, 9.17, 4.28, 7.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 4, 'AXM480', 28.08, 10.29, 25.83, false, 72, 20, 9, 19.54, 3.67, 17.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 8, 'AXM480', 27.40, 10.06, 25.22, false, 31, 13, 6, 14.30, 4.09, 12.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 12, 'AXM480', 26.41, 9.54, 25.17, false, 42, 19, 3, 19.31, 4.49, 7.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 16, 'AXM480', 24.69, 10.03, 25.24, false, 46, 14, 10, 12.86, 4.46, 5.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 20, 'AXM480', 27.85, 10.38, 25.09, false, 63, 20, 8, 19.32, 4.51, 4.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 3, 'AXM479', 27.17, 8.33, 26.37, false, 44, 20, 2, 18.55, 3.82, 6.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 7, 'AXM479', 26.02, 8.40, 26.54, false, 46, 14, 3, 12.13, 4.18, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 11, 'AXM479', 27.41, 8.00, 26.59, false, 75, 20, 13, 12.82, 4.13, 5.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 15, 'AXM479', 26.91, 8.93, 26.52, false, 19, 7, 2, 16.35, 4.64, 14.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 19, 'AXM479', 28.02, 7.73, 26.71, false, 32, 11, 5, 15.18, 4.60, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 3, 'AXM479', 29.36, 8.50, 27.28, false, 58, 18, 0, 13.44, 4.82, 7.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 7, 'AXM479', 28.26, 7.06, 26.77, false, 14, 7, 0, 13.26, 4.21, 11.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 11, 'AXM479', 27.97, 7.08, 27.10, false, 19, 6, 3, 21.33, 4.73, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 15, 'AXM479', 25.75, 8.83, 26.26, false, 30, 11, 5, 10.44, 4.45, 10.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 19, 'AXM479', 30.98, 7.06, 26.88, false, 50, 14, 8, 18.31, 4.93, 17.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 3, 'AXM479', 24.45, 7.80, 26.23, false, 33, 10, 5, 19.72, 3.80, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 7, 'AXM479', 25.67, 8.27, 26.34, false, 24, 10, 0, 11.00, 4.87, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 3, 'AXM479', 31.27, 0.52, 22.10, false, 58, 19, 0, 13.53, 5.18, 7.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 2, 'AXM478', 28.41, 7.10, 26.82, false, 70, 18, 11, 20.22, 4.23, 6.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 6, 'AXM478', 29.09, 8.63, 26.35, false, 43, 18, 5, 13.67, 4.30, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 10, 'AXM478', 27.59, 8.78, 27.55, false, 51, 16, 9, 13.58, 4.06, 9.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 14, 'AXM478', 28.36, 8.76, 26.63, false, 46, 17, 5, 18.47, 4.68, 16.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 18, 'AXM478', 28.25, 7.87, 26.75, false, 40, 20, 8, 17.11, 4.24, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 2, 'AXM478', 25.81, 8.02, 26.86, false, 58, 17, 2, 22.14, 4.13, 15.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 6, 'AXM478', 26.88, 8.54, 27.21, false, 13, 6, 1, 12.38, 4.26, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 10, 'AXM478', 25.63, 7.28, 26.45, false, 51, 15, 9, 13.44, 4.13, 9.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 14, 'AXM478', 26.64, 8.51, 26.88, false, 19, 7, 2, 20.32, 4.28, 8.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 18, 'AXM478', 26.11, 8.93, 26.82, false, 50, 20, 5, 21.68, 4.94, 13.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 2, 'AXM478', 28.81, 7.23, 26.57, false, 53, 17, 8, 21.27, 4.81, 18.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 6, 'AXM478', 27.12, 7.85, 26.77, false, 43, 20, 6, 20.53, 4.07, 9.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 4, 'AXM480', 27.91, 8.19, 26.27, false, 72, 20, 12, 18.35, 4.21, 5.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 8, 'AXM480', 26.74, 7.49, 26.57, false, 44, 20, 3, 17.85, 4.30, 11.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 12, 'AXM480', 29.34, 7.38, 27.17, false, 58, 15, 3, 21.31, 3.99, 17.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 16, 'AXM480', 30.89, 7.47, 27.06, false, 21, 9, 4, 12.04, 3.86, 10.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 20, 'AXM480', 27.45, 7.38, 26.20, false, 18, 5, 2, 16.32, 4.92, 15.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 4, 'AXM480', 26.69, 8.55, 26.53, false, 53, 14, 6, 9.37, 3.81, 6.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 8, 'AXM480', 25.59, 8.62, 26.13, false, 29, 9, 5, 9.94, 3.88, 4.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 12, 'AXM480', 25.21, 7.51, 26.10, false, 19, 6, 4, 12.64, 4.65, 11.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 16, 'AXM480', 27.51, 7.50, 26.28, false, 60, 20, 11, 9.78, 4.92, 7.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 20, 'AXM480', 27.68, 8.05, 27.26, false, 42, 14, 8, 9.33, 4.45, 7.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 4, 'AXM480', 31.59, 7.63, 27.06, false, 74, 20, 10, 19.54, 3.69, 18.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 11, 'AXM479', 29.08, 7.07, 26.61, false, 36, 14, 4, 12.14, 4.21, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 15, 'AXM479', 27.89, 7.75, 26.40, false, 20, 6, 4, 17.91, 4.22, 17.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 19, 'AXM479', 29.30, 8.14, 27.40, false, 13, 5, 3, 21.70, 4.47, 14.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 3, 'AXM479', 29.58, 0.48, 22.27, false, 45, 20, 2, 18.67, 4.17, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 7, 'AXM479', 26.79, 0.52, 22.15, false, 47, 14, 3, 12.33, 4.50, 4.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 11, 'AXM479', 29.97, 0.51, 22.07, false, 77, 20, 14, 12.98, 4.37, 5.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 15, 'AXM479', 28.95, 0.51, 22.18, false, 21, 7, 2, 16.47, 4.93, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 19, 'AXM479', 29.81, 0.50, 22.23, false, 34, 11, 6, 15.27, 4.86, 9.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 12, 'AXM480', 29.89, 8.67, 27.21, false, 42, 20, 4, 19.50, 4.69, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 14, 'AXM478', 26.62, 7.48, 26.95, false, 59, 19, 4, 17.97, 4.85, 8.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 18, 'AXM478', 28.04, 8.19, 26.89, false, 67, 20, 1, 9.49, 4.87, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 2, 'AXM478', 31.80, 0.51, 22.33, false, 70, 19, 12, 20.37, 4.26, 6.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 6, 'AXM478', 30.73, 0.51, 22.17, false, 43, 19, 5, 13.74, 4.68, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 10, 'AXM478', 28.00, 0.50, 22.40, false, 53, 16, 9, 13.62, 4.26, 9.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 14, 'AXM478', 29.20, 0.50, 22.49, false, 48, 17, 6, 18.53, 4.90, 16.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 18, 'AXM478', 30.83, 0.52, 22.24, false, 40, 20, 8, 17.15, 4.63, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 2, 'AXM478', 28.10, 0.51, 22.49, false, 58, 18, 2, 22.33, 4.42, 15.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 16, 'AXM480', 28.52, 8.43, 26.91, false, 47, 14, 10, 13.04, 4.77, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 20, 'AXM480', 28.80, 8.02, 26.08, false, 63, 20, 9, 19.35, 4.78, 4.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 4, 'AXM480', 28.54, 0.47, 22.41, false, 74, 20, 13, 18.44, 4.43, 5.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 8, 'AXM480', 28.05, 0.49, 22.41, false, 46, 20, 4, 17.96, 4.62, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 12, 'AXM480', 30.55, 0.50, 22.16, false, 60, 16, 3, 21.35, 4.35, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 16, 'AXM480', 31.43, 0.48, 22.17, false, 23, 9, 5, 12.17, 3.93, 10.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 20, 'AXM480', 28.40, 0.53, 22.17, false, 19, 5, 2, 16.49, 5.02, 15.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 4, 'AXM480', 28.02, 0.50, 22.24, false, 55, 14, 6, 9.50, 4.12, 6.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 7, 'AXM479', 28.79, 0.48, 22.08, false, 14, 8, 1, 13.32, 4.39, 11.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 11, 'AXM479', 28.88, 0.50, 22.43, false, 21, 7, 4, 21.38, 5.11, 5.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 15, 'AXM479', 29.68, 0.52, 22.48, false, 30, 11, 5, 10.58, 4.52, 10.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 19, 'AXM479', 34.58, 0.52, 22.07, false, 51, 14, 8, 18.48, 5.15, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 3, 'AXM479', 27.09, 0.48, 22.30, false, 35, 10, 5, 19.86, 3.89, 6.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 7, 'AXM479', 28.43, 0.47, 22.26, false, 24, 11, 1, 11.10, 5.11, 5.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 11, 'AXM479', 30.65, 0.51, 22.09, false, 38, 15, 4, 12.19, 4.52, 11.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 15, 'AXM479', 29.69, 0.50, 22.09, false, 21, 6, 4, 17.93, 4.45, 17.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 19, 'AXM479', 31.70, 0.50, 22.31, false, 15, 5, 4, 21.81, 4.86, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 8, 'AXM480', 25.61, 0.51, 22.22, false, 31, 10, 6, 9.96, 4.06, 4.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 6, 'AXM478', 30.39, 0.52, 22.00, false, 15, 6, 1, 12.47, 4.47, 11.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 10, 'AXM478', 27.85, 0.51, 22.29, false, 52, 15, 10, 13.60, 4.15, 9.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 14, 'AXM478', 29.28, 0.52, 22.30, false, 19, 8, 2, 20.33, 4.38, 8.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 18, 'AXM478', 27.37, 0.49, 22.00, false, 51, 20, 6, 21.79, 5.16, 13.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 2, 'AXM478', 30.41, 0.51, 22.06, false, 55, 17, 8, 21.38, 4.93, 18.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 6, 'AXM478', 28.59, 0.52, 22.43, false, 44, 20, 7, 20.69, 4.32, 9.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 10, 'AXM478', 24.67, 0.51, 22.04, false, 42, 20, 6, 21.00, 4.44, 10.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 14, 'AXM478', 26.96, 0.49, 22.08, false, 59, 19, 5, 17.98, 5.14, 9.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 18, 'AXM478', 29.00, 0.50, 22.16, false, 67, 20, 1, 9.64, 5.06, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 12, 'AXM480', 28.05, 0.50, 22.29, false, 20, 6, 4, 12.68, 4.88, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 16, 'AXM480', 28.41, 0.50, 22.04, false, 60, 20, 11, 9.81, 4.99, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 20, 'AXM480', 31.37, 0.50, 22.43, false, 42, 15, 9, 9.38, 4.78, 7.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 4, 'AXM480', 35.39, 0.53, 22.16, false, 75, 20, 11, 19.63, 4.01, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 8, 'AXM480', 27.71, 0.52, 22.36, false, 32, 13, 7, 14.68, 4.45, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 12, 'AXM480', 31.39, 0.50, 22.31, false, 44, 20, 4, 19.68, 5.04, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 16, 'AXM480', 30.75, 0.51, 22.43, false, 49, 15, 10, 13.05, 4.92, 5.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 20, 'AXM480', 31.46, 0.47, 22.34, false, 65, 20, 10, 19.48, 4.90, 4.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 3, 'AXM479', 24.05, 1.03, 20.11, false, 66, 20, 11, 18.07, 5.67, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 7, 'AXM479', 24.31, 1.03, 20.08, false, 44, 9, 3, 15.02, 5.92, 11.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 11, 'AXM479', 24.09, 0.99, 21.12, false, 53, 11, 2, 14.72, 6.15, 9.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 15, 'AXM479', 24.14, 1.02, 21.97, false, 51, 13, 2, 16.02, 6.44, 10.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 19, 'AXM479', 24.12, 0.98, 21.09, false, 70, 17, 3, 17.96, 6.42, 8.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 3, 'AXM479', 24.39, 0.97, 21.87, false, 32, 7, 6, 15.85, 6.14, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 7, 'AXM479', 24.09, 1.03, 20.27, false, 65, 20, 7, 19.56, 5.81, 7.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 11, 'AXM479', 23.83, 0.98, 21.12, false, 69, 17, 12, 20.45, 6.45, 14.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 15, 'AXM479', 24.47, 1.03, 20.72, false, 36, 9, 6, 18.22, 5.70, 10.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 19, 'AXM479', 24.47, 1.01, 20.96, false, 89, 20, 4, 12.16, 6.00, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 3, 'AXM479', 23.70, 1.03, 22.10, false, 86, 20, 12, 11.19, 6.26, 8.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 7, 'AXM479', 23.98, 0.97, 21.02, false, 32, 8, 3, 21.01, 6.16, 11.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 11, 'AXM479', 24.02, 0.99, 21.85, false, 75, 16, 11, 12.18, 5.62, 7.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 15, 'AXM479', 23.81, 0.99, 21.28, false, 80, 16, 1, 20.10, 5.60, 12.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 19, 'AXM479', 23.57, 0.97, 20.61, false, 75, 20, 7, 12.67, 6.35, 6.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 4, 'AXM480', 24.25, 0.98, 20.07, false, 83, 20, 9, 12.38, 5.55, 9.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 2, 'AXM478', 23.94, 1.01, 21.52, false, 22, 7, 5, 16.07, 5.68, 15.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 6, 'AXM478', 23.75, 1.02, 21.84, false, 86, 20, 7, 16.70, 5.69, 7.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 10, 'AXM478', 23.93, 0.99, 21.67, false, 82, 20, 6, 20.82, 6.18, 9.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 14, 'AXM478', 23.57, 1.02, 21.70, false, 41, 11, 7, 15.11, 5.55, 6.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 18, 'AXM478', 23.53, 0.98, 20.69, false, 61, 20, 4, 19.21, 6.09, 12.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 2, 'AXM478', 24.39, 0.98, 21.67, false, 68, 20, 13, 12.63, 6.44, 6.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 6, 'AXM478', 24.47, 1.02, 20.74, false, 48, 12, 2, 12.61, 5.61, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 10, 'AXM478', 23.57, 1.01, 21.23, false, 82, 20, 3, 14.84, 5.73, 14.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 14, 'AXM478', 24.24, 0.97, 20.68, false, 43, 10, 9, 22.53, 5.68, 13.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 18, 'AXM478', 24.16, 1.00, 21.77, false, 51, 11, 2, 18.04, 5.94, 15.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 2, 'AXM478', 24.07, 0.98, 20.64, false, 36, 11, 3, 19.29, 5.82, 6.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 6, 'AXM478', 23.90, 1.02, 20.61, false, 96, 20, 14, 18.39, 5.59, 17.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 10, 'AXM478', 24.18, 0.98, 21.49, false, 54, 11, 5, 18.56, 5.95, 15.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 14, 'AXM478', 23.50, 1.01, 20.84, false, 80, 17, 2, 14.41, 6.21, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 18, 'AXM478', 23.60, 1.02, 21.19, false, 29, 8, 3, 13.59, 6.16, 8.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 8, 'AXM480', 24.40, 0.98, 20.82, false, 29, 7, 3, 11.97, 6.30, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 12, 'AXM480', 23.85, 1.01, 21.02, false, 62, 20, 2, 21.89, 6.38, 10.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 16, 'AXM480', 24.08, 1.03, 20.98, false, 61, 14, 11, 16.64, 5.66, 8.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 20, 'AXM480', 23.62, 1.01, 20.15, false, 39, 8, 5, 13.43, 6.06, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 4, 'AXM480', 24.19, 1.02, 21.27, false, 50, 13, 4, 19.46, 5.82, 14.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 8, 'AXM480', 24.16, 0.98, 20.81, false, 45, 15, 5, 12.32, 6.29, 9.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 12, 'AXM480', 23.82, 0.98, 21.11, false, 49, 12, 4, 21.61, 6.20, 16.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 16, 'AXM480', 23.89, 0.99, 21.35, false, 54, 15, 11, 19.04, 6.26, 10.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 20, 'AXM480', 24.12, 0.98, 21.66, false, 52, 11, 8, 12.83, 6.04, 9.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 4, 'AXM480', 23.74, 1.03, 21.37, false, 34, 9, 2, 12.64, 5.91, 6.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 8, 'AXM480', 23.71, 0.99, 20.70, false, 82, 20, 14, 16.48, 5.57, 9.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 12, 'AXM480', 24.43, 1.02, 22.00, false, 44, 11, 8, 17.87, 6.46, 9.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 16, 'AXM480', 24.48, 1.02, 21.44, false, 49, 14, 5, 14.73, 5.78, 5.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 20, 'AXM480', 23.72, 1.01, 21.37, false, 53, 12, 3, 20.64, 5.66, 9.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 3, 'AXM479', 25.92, 9.69, 25.40, false, 67, 20, 11, 18.19, 5.69, 15.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 7, 'AXM479', 27.39, 10.35, 24.97, false, 44, 10, 3, 15.03, 6.24, 11.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 11, 'AXM479', 27.24, 10.36, 26.02, false, 54, 12, 2, 14.81, 6.22, 9.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 15, 'AXM479', 27.02, 10.16, 24.15, false, 52, 14, 3, 16.18, 6.72, 10.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 19, 'AXM479', 25.76, 10.18, 24.40, false, 71, 18, 3, 18.08, 6.75, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 3, 'AXM479', 27.94, 9.56, 24.88, false, 34, 7, 6, 16.00, 6.52, 7.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 7, 'AXM479', 25.20, 10.08, 24.85, false, 65, 20, 7, 19.73, 6.02, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 11, 'AXM479', 24.18, 9.69, 25.79, false, 70, 17, 12, 20.60, 6.61, 14.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 15, 'AXM479', 28.11, 9.77, 25.13, false, 36, 10, 7, 18.37, 6.04, 10.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 19, 'AXM479', 24.88, 10.21, 25.21, false, 91, 20, 4, 12.30, 6.19, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 3, 'AXM479', 26.41, 10.00, 24.16, false, 86, 20, 13, 11.22, 6.37, 8.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 7, 'AXM479', 24.80, 10.05, 24.69, false, 34, 9, 3, 21.07, 6.24, 11.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 3, 'AXM479', 30.58, 9.00, 26.89, false, 34, 7, 6, 16.19, 6.89, 7.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 2, 'AXM478', 24.15, 9.86, 25.13, false, 24, 7, 5, 16.09, 5.77, 15.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 6, 'AXM478', 24.66, 10.22, 25.14, false, 88, 20, 8, 16.76, 5.92, 7.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 10, 'AXM478', 27.33, 10.09, 25.09, false, 84, 20, 6, 20.87, 6.24, 9.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 14, 'AXM478', 26.54, 9.99, 25.36, false, 43, 12, 8, 15.14, 5.65, 6.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 18, 'AXM478', 24.14, 10.00, 25.52, false, 62, 20, 5, 19.22, 6.36, 12.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 2, 'AXM478', 25.74, 9.70, 24.01, false, 69, 20, 13, 12.82, 6.76, 6.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 6, 'AXM478', 27.37, 9.56, 25.54, false, 49, 12, 3, 12.66, 5.78, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 10, 'AXM478', 24.43, 10.09, 25.34, false, 83, 20, 4, 14.93, 5.85, 14.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 14, 'AXM478', 26.62, 9.92, 25.52, false, 43, 11, 10, 22.55, 5.69, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 18, 'AXM478', 27.09, 10.10, 24.65, false, 53, 12, 3, 18.19, 5.95, 16.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 2, 'AXM478', 26.08, 9.62, 25.38, false, 36, 12, 4, 19.36, 5.89, 6.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 6, 'AXM478', 27.18, 9.68, 25.03, false, 96, 20, 15, 18.54, 5.79, 17.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 4, 'AXM480', 24.46, 9.63, 25.65, false, 84, 20, 9, 12.45, 5.59, 9.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 8, 'AXM480', 27.08, 10.48, 24.51, false, 29, 8, 3, 12.10, 6.64, 7.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 12, 'AXM480', 25.71, 10.02, 25.43, false, 63, 20, 2, 22.01, 6.47, 10.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 16, 'AXM480', 24.56, 9.58, 25.59, false, 63, 14, 11, 16.70, 5.79, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 20, 'AXM480', 27.08, 9.57, 24.91, false, 40, 8, 6, 13.49, 6.41, 11.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 4, 'AXM480', 24.58, 10.06, 25.36, false, 50, 13, 5, 19.49, 5.97, 14.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 8, 'AXM480', 24.47, 9.75, 25.87, false, 46, 16, 6, 12.33, 6.56, 9.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 12, 'AXM480', 26.45, 9.69, 25.52, false, 51, 13, 5, 21.65, 6.26, 16.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 16, 'AXM480', 25.91, 10.28, 24.91, false, 55, 16, 11, 19.08, 6.55, 10.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 20, 'AXM480', 27.57, 10.35, 25.93, false, 53, 11, 8, 12.93, 6.21, 9.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 4, 'AXM480', 26.34, 10.17, 26.02, false, 36, 9, 2, 12.79, 6.13, 6.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 11, 'AXM479', 25.67, 10.43, 25.02, false, 77, 16, 11, 12.26, 5.72, 8.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 15, 'AXM479', 27.55, 9.95, 24.03, false, 80, 16, 1, 20.16, 5.88, 12.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 19, 'AXM479', 25.78, 10.44, 25.24, false, 77, 20, 7, 12.75, 6.53, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 3, 'AXM479', 27.41, 7.04, 26.15, false, 69, 20, 11, 18.30, 6.04, 15.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 7, 'AXM479', 27.65, 7.65, 26.59, false, 44, 10, 4, 15.05, 6.38, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 11, 'AXM479', 28.43, 8.48, 26.20, false, 54, 13, 2, 14.91, 6.61, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 15, 'AXM479', 30.35, 7.82, 26.97, false, 54, 14, 3, 16.30, 6.83, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 19, 'AXM479', 28.17, 8.56, 26.84, false, 71, 19, 3, 18.22, 6.83, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 12, 'AXM480', 25.31, 9.66, 25.29, false, 46, 11, 9, 18.00, 6.56, 9.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 14, 'AXM478', 25.90, 9.84, 25.19, false, 81, 18, 3, 14.49, 6.54, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 18, 'AXM478', 24.41, 9.52, 25.67, false, 29, 9, 3, 13.69, 6.41, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 2, 'AXM478', 27.10, 8.78, 27.26, false, 25, 7, 5, 16.13, 6.16, 15.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 6, 'AXM478', 24.93, 8.10, 26.64, false, 88, 20, 8, 16.77, 6.12, 7.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 10, 'AXM478', 28.45, 8.90, 27.10, false, 86, 20, 6, 20.91, 6.35, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 14, 'AXM478', 27.19, 7.23, 26.48, false, 43, 13, 8, 15.17, 5.90, 6.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 18, 'AXM478', 25.87, 7.34, 26.20, false, 62, 20, 5, 19.30, 6.44, 12.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 2, 'AXM478', 28.66, 7.24, 26.74, false, 71, 20, 14, 12.99, 6.94, 6.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 16, 'AXM480', 28.00, 9.90, 25.51, false, 50, 15, 5, 14.88, 5.80, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 20, 'AXM480', 25.76, 10.16, 25.64, false, 54, 13, 4, 20.73, 5.85, 9.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 4, 'AXM480', 26.70, 8.42, 26.95, false, 85, 20, 9, 12.46, 5.62, 9.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 8, 'AXM480', 30.38, 7.05, 26.82, false, 30, 9, 3, 12.16, 6.83, 7.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 12, 'AXM480', 28.64, 8.65, 26.13, false, 64, 20, 2, 22.19, 6.75, 10.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 16, 'AXM480', 25.01, 8.39, 27.20, false, 63, 14, 12, 16.78, 6.11, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 20, 'AXM480', 30.56, 7.00, 26.40, false, 41, 8, 7, 13.53, 6.69, 11.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 4, 'AXM480', 26.18, 8.63, 27.02, false, 51, 13, 5, 19.62, 6.06, 14.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 7, 'AXM479', 27.34, 8.76, 27.10, false, 65, 20, 7, 19.86, 6.22, 7.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 11, 'AXM479', 26.55, 7.68, 26.76, false, 70, 18, 12, 20.76, 6.82, 14.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 15, 'AXM479', 28.56, 7.14, 27.09, false, 38, 10, 8, 18.39, 6.30, 10.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 19, 'AXM479', 27.61, 8.55, 26.62, false, 91, 20, 5, 12.39, 6.24, 11.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 3, 'AXM479', 30.41, 7.85, 26.37, false, 88, 20, 13, 11.38, 6.41, 8.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 7, 'AXM479', 25.07, 8.76, 27.30, false, 34, 9, 3, 21.19, 6.25, 11.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 11, 'AXM479', 27.94, 7.37, 26.78, false, 77, 17, 11, 12.45, 6.04, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 15, 'AXM479', 28.67, 8.10, 26.72, false, 81, 16, 1, 20.23, 5.92, 12.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 19, 'AXM479', 28.16, 8.01, 26.75, false, 78, 20, 7, 12.87, 6.84, 7.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 8, 'AXM480', 27.12, 7.68, 26.89, false, 46, 16, 7, 12.52, 6.56, 9.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 6, 'AXM478', 31.16, 9.00, 27.61, false, 51, 12, 4, 12.81, 6.03, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 10, 'AXM478', 25.30, 8.86, 26.77, false, 85, 20, 5, 15.05, 6.12, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 14, 'AXM478', 29.86, 7.86, 27.25, false, 45, 12, 10, 22.67, 6.00, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 18, 'AXM478', 29.51, 8.88, 27.74, false, 53, 12, 4, 18.37, 6.13, 16.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 2, 'AXM478', 26.95, 7.57, 26.05, false, 38, 13, 5, 19.46, 6.09, 6.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 6, 'AXM478', 30.37, 8.88, 27.34, false, 97, 20, 15, 18.67, 5.98, 17.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 10, 'AXM478', 31.35, 8.56, 27.14, false, 57, 12, 5, 18.77, 6.19, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 14, 'AXM478', 29.11, 8.27, 26.03, false, 82, 19, 4, 14.49, 6.60, 11.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 18, 'AXM478', 24.68, 8.18, 26.08, false, 30, 10, 3, 13.79, 6.73, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 12, 'AXM480', 28.84, 8.01, 26.48, false, 52, 13, 5, 21.69, 6.39, 17.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 16, 'AXM480', 27.87, 8.71, 26.57, false, 56, 16, 12, 19.21, 6.81, 10.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 20, 'AXM480', 28.63, 7.30, 26.41, false, 54, 11, 9, 13.10, 6.38, 10.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 4, 'AXM480', 29.87, 8.11, 26.70, false, 36, 10, 3, 12.90, 6.43, 6.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 8, 'AXM480', 27.38, 8.40, 27.15, false, 85, 20, 15, 16.61, 5.75, 9.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 12, 'AXM480', 28.47, 8.36, 26.10, false, 47, 12, 9, 18.16, 6.93, 9.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 16, 'AXM480', 29.96, 8.21, 26.76, false, 51, 16, 6, 14.94, 6.15, 6.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 20, 'AXM480', 27.31, 8.55, 26.81, false, 55, 13, 5, 20.90, 6.09, 9.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 3, 'AXM479', 31.33, 0.49, 22.31, false, 70, 20, 11, 18.37, 6.38, 15.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 7, 'AXM479', 29.51, 0.49, 22.01, false, 46, 10, 4, 15.10, 6.69, 11.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 11, 'AXM479', 28.78, 0.48, 22.29, false, 56, 14, 2, 14.99, 6.76, 10.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 15, 'AXM479', 33.63, 0.53, 22.01, false, 56, 14, 4, 16.33, 6.94, 10.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 19, 'AXM479', 30.56, 0.49, 22.24, false, 73, 19, 3, 18.23, 7.15, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 3, 'AXM479', 33.39, 0.51, 22.16, false, 34, 7, 6, 16.31, 6.90, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 7, 'AXM479', 27.81, 0.47, 22.37, false, 65, 20, 8, 19.93, 6.58, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 11, 'AXM479', 30.47, 0.48, 22.13, false, 72, 18, 12, 20.77, 7.18, 14.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 15, 'AXM479', 30.74, 0.52, 22.00, false, 38, 11, 8, 18.44, 6.47, 10.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 19, 'AXM479', 28.73, 0.52, 22.04, false, 93, 20, 6, 12.54, 6.25, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 3, 'AXM479', 30.62, 0.53, 22.33, false, 88, 20, 13, 11.54, 6.65, 8.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 7, 'AXM479', 26.44, 0.52, 22.28, false, 35, 10, 3, 21.26, 6.52, 11.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 11, 'AXM479', 30.62, 0.48, 22.35, false, 78, 18, 12, 12.47, 6.24, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 15, 'AXM479', 32.37, 0.50, 22.38, false, 82, 17, 1, 20.30, 6.08, 12.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 19, 'AXM479', 31.71, 0.51, 22.33, false, 78, 20, 8, 12.96, 7.02, 7.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 4, 'AXM480', 29.25, 0.49, 22.39, false, 85, 20, 10, 12.65, 6.01, 9.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 2, 'AXM478', 29.54, 0.52, 22.35, false, 26, 8, 6, 16.14, 6.55, 15.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 6, 'AXM478', 28.40, 0.51, 22.10, false, 89, 20, 9, 16.83, 6.41, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 10, 'AXM478', 29.19, 0.48, 22.09, false, 88, 20, 6, 20.95, 6.54, 10.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 14, 'AXM478', 30.13, 0.50, 22.09, false, 45, 13, 8, 15.34, 5.91, 6.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 18, 'AXM478', 28.13, 0.51, 22.26, false, 64, 20, 5, 19.37, 6.59, 12.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 2, 'AXM478', 30.31, 0.51, 22.13, false, 71, 20, 15, 13.00, 6.97, 7.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 6, 'AXM478', 33.32, 0.50, 22.08, false, 53, 12, 4, 12.88, 6.35, 11.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 10, 'AXM478', 27.84, 0.53, 22.32, false, 87, 20, 6, 15.25, 6.29, 14.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 14, 'AXM478', 30.37, 0.48, 22.36, false, 46, 12, 10, 22.74, 6.38, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 18, 'AXM478', 32.89, 0.49, 22.05, false, 54, 12, 5, 18.53, 6.41, 16.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 2, 'AXM478', 29.98, 0.48, 22.21, false, 39, 14, 6, 19.48, 6.25, 6.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 6, 'AXM478', 33.41, 0.51, 22.50, false, 98, 20, 16, 18.81, 6.33, 17.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 10, 'AXM478', 32.81, 0.50, 22.23, false, 58, 12, 6, 18.93, 6.49, 15.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 14, 'AXM478', 29.23, 0.47, 22.31, false, 84, 19, 5, 14.61, 6.73, 11.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 18, 'AXM478', 28.37, 0.51, 22.04, false, 30, 11, 4, 13.94, 7.11, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 8, 'AXM480', 32.80, 0.53, 22.39, false, 31, 10, 4, 12.26, 7.14, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 12, 'AXM480', 31.40, 0.51, 22.20, false, 66, 20, 3, 22.19, 7.07, 10.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 16, 'AXM480', 26.19, 0.53, 22.38, false, 65, 15, 12, 16.94, 6.41, 8.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 20, 'AXM480', 32.39, 0.49, 22.18, false, 41, 8, 8, 13.71, 6.95, 11.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 4, 'AXM480', 28.33, 0.52, 22.37, false, 53, 14, 5, 19.78, 6.18, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 8, 'AXM480', 30.15, 0.50, 22.01, false, 47, 17, 8, 12.62, 6.59, 9.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 12, 'AXM480', 31.58, 0.50, 22.42, false, 54, 14, 6, 21.87, 6.45, 17.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 16, 'AXM480', 29.99, 0.50, 22.22, false, 57, 16, 13, 19.36, 6.87, 10.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 20, 'AXM480', 31.37, 0.49, 22.38, false, 55, 12, 10, 13.20, 6.39, 10.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 4, 'AXM480', 32.20, 0.49, 22.00, false, 36, 10, 3, 13.09, 6.54, 6.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 8, 'AXM480', 28.87, 0.51, 22.22, false, 85, 20, 16, 16.63, 6.00, 9.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 12, 'AXM480', 30.16, 0.47, 22.36, false, 49, 12, 10, 18.34, 7.07, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 16, 'AXM480', 31.24, 0.48, 22.38, false, 51, 17, 7, 14.99, 6.36, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 20, 'AXM480', 28.85, 0.52, 22.52, false, 57, 13, 5, 21.03, 6.33, 9.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 3, 'AXM479', 24.16, 0.97, 20.80, false, 109, 17, 13, 13.45, 7.98, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 7, 'AXM479', 24.14, 0.99, 20.65, false, 104, 18, 5, 22.51, 8.37, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 11, 'AXM479', 23.90, 0.99, 21.70, false, 105, 16, 9, 17.30, 7.90, 10.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 15, 'AXM479', 23.60, 1.01, 21.97, false, 48, 8, 3, 15.16, 7.69, 9.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 19, 'AXM479', 23.62, 0.97, 21.66, false, 139, 20, 5, 24.07, 7.63, 23.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 3, 'AXM479', 23.79, 0.97, 20.38, false, 122, 20, 22, 24.55, 8.23, 14.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 7, 'AXM479', 24.49, 1.01, 21.62, false, 126, 20, 19, 14.27, 7.80, 9.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 11, 'AXM479', 24.24, 0.99, 21.09, false, 47, 8, 3, 18.17, 8.10, 12.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 15, 'AXM479', 23.94, 1.00, 21.57, false, 133, 20, 6, 17.57, 8.41, 10.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 19, 'AXM479', 24.27, 1.00, 20.06, false, 67, 10, 6, 16.74, 7.88, 14.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 3, 'AXM479', 23.97, 0.97, 21.16, false, 113, 20, 15, 25.96, 8.16, 8.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 7, 'AXM479', 24.47, 1.02, 21.88, false, 117, 20, 18, 15.31, 8.48, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 2, 'AXM478', 24.38, 1.00, 20.47, false, 51, 9, 12, 25.21, 8.29, 21.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 6, 'AXM478', 24.49, 1.03, 21.06, false, 105, 18, 19, 14.05, 7.73, 9.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 10, 'AXM478', 23.91, 1.01, 20.53, false, 65, 11, 9, 24.53, 8.06, 9.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 14, 'AXM478', 24.30, 1.01, 21.30, false, 80, 12, 10, 19.08, 8.25, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 18, 'AXM478', 23.74, 1.03, 21.87, false, 121, 20, 20, 19.67, 7.61, 10.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 2, 'AXM478', 23.95, 1.00, 21.62, false, 43, 8, 6, 15.84, 7.82, 10.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 6, 'AXM478', 23.92, 0.98, 21.80, false, 116, 19, 18, 13.78, 7.94, 13.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 10, 'AXM478', 23.87, 0.98, 21.89, false, 115, 19, 16, 21.38, 8.27, 14.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 14, 'AXM478', 23.81, 1.00, 21.45, false, 116, 19, 3, 17.25, 8.15, 14.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 18, 'AXM478', 24.44, 1.00, 21.19, false, 57, 10, 3, 24.53, 8.49, 20.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 2, 'AXM478', 23.51, 1.03, 21.01, false, 138, 20, 19, 20.29, 7.66, 9.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 6, 'AXM478', 23.69, 0.99, 20.35, false, 130, 20, 9, 20.69, 8.36, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 4, 'AXM480', 24.28, 0.99, 21.38, false, 66, 10, 6, 22.52, 8.06, 16.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 8, 'AXM480', 24.18, 1.01, 20.24, false, 103, 16, 7, 20.04, 7.68, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 12, 'AXM480', 23.63, 1.02, 21.42, false, 65, 10, 12, 16.70, 8.14, 15.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 16, 'AXM480', 24.09, 1.00, 21.11, false, 138, 20, 3, 16.94, 8.35, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 20, 'AXM480', 24.07, 0.99, 20.37, false, 59, 9, 12, 24.02, 7.55, 7.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 4, 'AXM480', 23.65, 0.98, 21.45, false, 121, 20, 11, 21.70, 7.50, 12.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 8, 'AXM480', 24.49, 0.98, 20.99, false, 101, 20, 19, 21.46, 8.28, 21.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 12, 'AXM480', 24.07, 0.98, 20.51, false, 84, 13, 6, 21.71, 7.82, 12.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 16, 'AXM480', 23.89, 1.02, 21.33, false, 74, 12, 13, 20.60, 7.56, 8.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 20, 'AXM480', 24.10, 0.98, 20.83, false, 124, 20, 11, 25.35, 8.02, 19.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 4, 'AXM480', 23.52, 0.99, 20.14, false, 54, 10, 6, 24.89, 7.59, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 11, 'AXM479', 24.22, 1.02, 20.73, false, 61, 11, 2, 14.69, 8.14, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 15, 'AXM479', 24.30, 1.03, 21.48, false, 56, 11, 7, 22.95, 7.67, 20.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 19, 'AXM479', 24.03, 1.02, 20.68, false, 100, 16, 9, 24.32, 8.13, 15.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 3, 'AXM479', 26.46, 10.01, 24.95, false, 109, 17, 14, 13.51, 8.24, 11.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 7, 'AXM479', 27.63, 9.58, 25.41, false, 105, 19, 5, 22.56, 8.63, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 11, 'AXM479', 24.18, 9.71, 25.70, false, 107, 17, 10, 17.50, 8.08, 10.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 15, 'AXM479', 27.03, 10.36, 24.17, false, 50, 9, 3, 15.34, 7.87, 9.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 19, 'AXM479', 25.84, 10.42, 24.78, false, 141, 20, 5, 24.17, 7.70, 23.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 12, 'AXM480', 24.33, 1.03, 21.87, false, 56, 11, 7, 18.76, 8.36, 14.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 14, 'AXM478', 24.22, 0.98, 21.84, false, 140, 20, 22, 15.48, 7.79, 12.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 18, 'AXM478', 24.14, 1.02, 21.83, false, 103, 18, 10, 19.11, 7.93, 13.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 2, 'AXM478', 27.04, 10.39, 25.07, false, 52, 10, 12, 25.22, 8.57, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 6, 'AXM478', 25.93, 10.45, 25.31, false, 105, 19, 19, 14.15, 7.80, 9.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 10, 'AXM478', 23.94, 9.77, 25.79, false, 67, 12, 9, 24.66, 8.14, 9.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 14, 'AXM478', 26.01, 9.90, 25.04, false, 80, 12, 10, 19.26, 8.44, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 18, 'AXM478', 26.29, 10.00, 25.24, false, 121, 20, 20, 19.75, 7.77, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 2, 'AXM478', 26.53, 9.52, 25.77, false, 43, 9, 7, 15.95, 8.15, 10.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 16, 'AXM480', 24.40, 0.98, 21.27, false, 115, 20, 24, 23.09, 7.98, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 20, 'AXM480', 23.51, 1.01, 21.22, false, 61, 12, 9, 25.87, 7.69, 17.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 4, 'AXM480', 27.55, 9.66, 24.62, false, 67, 10, 6, 22.71, 8.43, 16.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 8, 'AXM480', 27.38, 10.46, 25.14, false, 105, 16, 7, 20.13, 8.08, 18.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 12, 'AXM480', 24.51, 9.63, 24.77, false, 66, 10, 12, 16.81, 8.37, 15.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 16, 'AXM480', 24.17, 10.17, 24.44, false, 139, 20, 4, 17.12, 8.54, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 20, 'AXM480', 25.99, 9.79, 25.03, false, 61, 9, 13, 24.02, 7.75, 7.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 4, 'AXM480', 23.78, 10.05, 25.44, false, 122, 20, 12, 21.83, 7.72, 12.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 3, 'AXM479', 24.66, 10.05, 25.32, false, 122, 20, 22, 24.65, 8.58, 14.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 7, 'AXM479', 27.87, 10.19, 26.02, false, 126, 20, 19, 14.38, 8.19, 9.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 11, 'AXM479', 24.70, 9.63, 24.26, false, 49, 8, 4, 18.30, 8.37, 12.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 15, 'AXM479', 25.29, 10.43, 25.64, false, 133, 20, 7, 17.66, 8.65, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 19, 'AXM479', 24.40, 9.78, 25.40, false, 69, 11, 7, 16.87, 8.09, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 3, 'AXM479', 25.29, 10.01, 24.76, false, 114, 20, 15, 26.02, 8.16, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 7, 'AXM479', 27.28, 10.07, 25.48, false, 117, 20, 18, 15.47, 8.57, 14.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 11, 'AXM479', 25.53, 9.82, 24.33, false, 63, 11, 3, 14.86, 8.17, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 15, 'AXM479', 25.70, 10.11, 25.95, false, 58, 11, 8, 22.96, 8.04, 20.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 19, 'AXM479', 27.33, 10.44, 26.17, false, 102, 16, 10, 24.36, 8.18, 15.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 8, 'AXM480', 26.37, 10.48, 24.56, false, 102, 20, 19, 21.49, 8.59, 21.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 6, 'AXM478', 24.05, 9.91, 25.77, false, 116, 19, 19, 13.93, 8.30, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 10, 'AXM478', 24.23, 9.89, 24.57, false, 115, 20, 17, 21.57, 8.60, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 14, 'AXM478', 26.72, 9.86, 24.99, false, 117, 19, 4, 17.26, 8.36, 14.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 18, 'AXM478', 25.31, 10.10, 24.91, false, 57, 11, 4, 24.54, 8.69, 20.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 2, 'AXM478', 25.60, 9.51, 24.15, false, 140, 20, 20, 20.37, 7.87, 9.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 6, 'AXM478', 26.37, 9.80, 24.19, false, 130, 20, 9, 20.72, 8.50, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 10, 'AXM478', 24.33, 10.29, 24.89, false, 120, 20, 6, 21.00, 8.19, 14.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 14, 'AXM478', 25.92, 10.31, 25.06, false, 142, 20, 22, 15.66, 7.86, 12.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 18, 'AXM478', 27.25, 10.40, 24.79, false, 103, 18, 11, 19.17, 8.05, 13.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 12, 'AXM480', 25.92, 9.87, 25.59, false, 85, 14, 6, 21.84, 7.96, 12.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 16, 'AXM480', 25.16, 9.68, 25.17, false, 75, 13, 14, 20.66, 7.89, 8.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 20, 'AXM480', 26.78, 10.37, 26.05, false, 126, 20, 11, 25.37, 8.36, 19.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 4, 'AXM480', 24.78, 10.49, 24.65, false, 55, 11, 7, 25.07, 7.89, 15.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 8, 'AXM480', 24.87, 10.34, 24.15, false, 104, 20, 4, 14.58, 8.70, 10.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 12, 'AXM480', 26.62, 10.43, 24.19, false, 57, 11, 8, 18.83, 8.47, 14.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 16, 'AXM480', 26.99, 9.90, 24.67, false, 115, 20, 24, 23.22, 8.20, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 20, 'AXM480', 24.79, 9.51, 24.86, false, 63, 12, 10, 25.96, 7.82, 17.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 3, 'AXM479', 30.10, 8.18, 26.39, false, 110, 18, 15, 13.68, 8.45, 11.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 7, 'AXM479', 28.20, 8.44, 26.09, false, 105, 19, 6, 22.62, 8.88, 10.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 11, 'AXM479', 26.32, 8.99, 26.36, false, 109, 17, 11, 17.51, 8.28, 10.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 15, 'AXM479', 28.85, 7.97, 26.42, false, 50, 10, 3, 15.38, 8.11, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 19, 'AXM479', 29.06, 8.07, 26.31, false, 143, 20, 6, 24.26, 7.82, 23.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 3, 'AXM479', 25.75, 8.96, 27.02, false, 122, 20, 23, 24.74, 8.89, 14.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 7, 'AXM479', 29.42, 8.39, 27.27, false, 127, 20, 20, 14.51, 8.56, 9.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 11, 'AXM479', 27.37, 7.47, 26.37, false, 51, 9, 5, 18.42, 8.42, 12.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 15, 'AXM479', 28.57, 8.91, 26.15, false, 135, 20, 7, 17.69, 8.95, 10.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 19, 'AXM479', 27.30, 7.05, 26.02, false, 69, 12, 8, 16.90, 8.28, 14.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 3, 'AXM479', 27.14, 7.85, 26.41, false, 116, 20, 16, 26.22, 8.17, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 7, 'AXM479', 27.72, 8.45, 27.17, false, 119, 20, 18, 15.62, 8.58, 14.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 11, 'AXM479', 28.89, 7.37, 26.41, false, 64, 11, 4, 15.03, 8.35, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 15, 'AXM479', 28.71, 8.22, 26.56, false, 59, 11, 9, 23.05, 8.37, 20.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 19, 'AXM479', 30.32, 8.98, 26.17, false, 102, 17, 11, 24.41, 8.46, 15.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 4, 'AXM480', 28.25, 8.03, 26.98, false, 67, 10, 6, 22.79, 8.80, 16.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 2, 'AXM478', 30.89, 7.04, 26.33, false, 54, 11, 12, 25.27, 8.79, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 6, 'AXM478', 27.51, 8.01, 26.47, false, 107, 19, 20, 14.22, 7.92, 9.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 10, 'AXM478', 25.42, 8.62, 27.54, false, 69, 12, 9, 24.72, 8.38, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 14, 'AXM478', 26.42, 7.91, 26.51, false, 81, 12, 11, 19.36, 8.81, 18.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 18, 'AXM478', 27.24, 7.36, 26.40, false, 122, 20, 20, 19.82, 7.89, 10.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 2, 'AXM478', 26.55, 7.52, 27.11, false, 45, 9, 7, 16.12, 8.21, 10.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 6, 'AXM478', 26.79, 8.18, 26.26, false, 117, 20, 19, 14.09, 8.54, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 10, 'AXM478', 27.84, 7.55, 27.13, false, 115, 20, 18, 21.66, 8.72, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 14, 'AXM478', 30.71, 7.49, 26.51, false, 119, 20, 4, 17.26, 8.72, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 18, 'AXM478', 28.87, 7.48, 27.13, false, 59, 12, 5, 24.72, 9.04, 20.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 2, 'AXM478', 26.47, 8.38, 27.54, false, 140, 20, 21, 20.50, 8.24, 9.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 6, 'AXM478', 29.85, 8.21, 26.10, false, 130, 20, 10, 20.81, 8.90, 15.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 10, 'AXM478', 25.37, 8.04, 27.21, false, 122, 20, 7, 21.02, 8.49, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 14, 'AXM478', 28.40, 8.39, 26.17, false, 143, 20, 22, 15.75, 8.05, 12.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 18, 'AXM478', 29.82, 7.99, 26.37, false, 103, 18, 12, 19.33, 8.10, 13.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 8, 'AXM480', 31.06, 7.30, 26.51, false, 105, 17, 8, 20.32, 8.46, 18.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 12, 'AXM480', 28.47, 7.64, 27.00, false, 67, 10, 12, 16.87, 8.54, 15.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 16, 'AXM480', 27.68, 8.71, 26.40, false, 139, 20, 5, 17.23, 8.81, 13.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 20, 'AXM480', 27.95, 7.25, 26.01, false, 61, 10, 13, 24.03, 8.08, 8.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 4, 'AXM480', 26.54, 7.74, 26.67, false, 124, 20, 13, 21.97, 7.83, 12.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 8, 'AXM480', 26.47, 8.92, 26.36, false, 103, 20, 19, 21.52, 8.83, 21.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 12, 'AXM480', 29.21, 7.80, 26.51, false, 87, 14, 6, 21.99, 8.05, 12.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 16, 'AXM480', 25.47, 8.72, 26.45, false, 76, 14, 15, 20.75, 7.91, 8.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 20, 'AXM480', 26.96, 7.44, 26.12, false, 126, 20, 11, 25.56, 8.57, 19.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 4, 'AXM480', 28.51, 7.25, 26.55, false, 57, 11, 8, 25.15, 8.21, 15.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 8, 'AXM480', 28.81, 8.72, 27.13, false, 105, 20, 5, 14.72, 9.09, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 12, 'AXM480', 26.63, 8.83, 27.39, false, 58, 12, 9, 18.97, 8.66, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 16, 'AXM480', 30.32, 7.89, 27.14, false, 116, 20, 24, 23.41, 8.50, 12.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 20, 'AXM480', 26.33, 8.01, 27.32, false, 63, 12, 10, 26.13, 7.91, 17.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 3, 'AXM479', 32.91, 0.50, 22.42, false, 112, 19, 15, 13.80, 8.66, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 7, 'AXM479', 28.62, 0.49, 22.45, false, 107, 19, 7, 22.80, 9.02, 10.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 11, 'AXM479', 28.55, 0.50, 22.32, false, 110, 18, 12, 17.65, 8.28, 10.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 15, 'AXM479', 29.59, 0.52, 22.03, false, 51, 10, 4, 15.53, 8.47, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 19, 'AXM479', 29.07, 0.51, 22.44, false, 143, 20, 6, 24.38, 7.90, 24.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 3, 'AXM479', 26.45, 0.51, 22.17, false, 124, 20, 24, 24.89, 9.02, 14.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 7, 'AXM479', 31.65, 0.48, 22.23, false, 128, 20, 21, 14.67, 8.62, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 11, 'AXM479', 30.42, 0.47, 22.30, false, 51, 10, 5, 18.56, 8.57, 12.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 15, 'AXM479', 31.81, 0.50, 22.21, false, 136, 20, 7, 17.85, 8.95, 10.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 19, 'AXM479', 31.09, 0.49, 22.45, false, 70, 12, 9, 17.01, 8.31, 14.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 3, 'AXM479', 30.07, 0.48, 22.05, false, 117, 20, 17, 26.26, 8.40, 8.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 7, 'AXM479', 30.62, 0.51, 22.50, false, 121, 20, 18, 15.67, 8.89, 14.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 2, 'AXM478', 32.57, 0.53, 22.28, false, 55, 11, 12, 25.32, 9.00, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 6, 'AXM478', 30.80, 0.49, 22.21, false, 109, 19, 21, 14.24, 8.00, 9.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 10, 'AXM478', 25.75, 0.52, 22.52, false, 71, 12, 10, 24.77, 8.55, 9.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 14, 'AXM478', 27.97, 0.50, 22.02, false, 83, 13, 11, 19.37, 8.86, 18.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 18, 'AXM478', 27.80, 0.49, 22.01, false, 123, 20, 21, 19.83, 7.91, 10.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 2, 'AXM478', 27.80, 0.50, 22.04, false, 47, 10, 7, 16.24, 8.44, 10.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 6, 'AXM478', 27.86, 0.50, 22.23, false, 118, 20, 19, 14.16, 8.62, 13.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 10, 'AXM478', 30.46, 0.51, 22.40, false, 116, 20, 19, 21.72, 8.78, 14.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 14, 'AXM478', 30.98, 0.48, 22.06, false, 120, 20, 4, 17.41, 8.76, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 18, 'AXM478', 30.10, 0.52, 22.53, false, 60, 12, 5, 24.72, 9.12, 20.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 2, 'AXM478', 26.49, 0.52, 22.21, false, 141, 20, 22, 20.68, 8.61, 9.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 6, 'AXM478', 32.92, 0.49, 22.02, false, 132, 20, 10, 20.95, 8.97, 15.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 4, 'AXM480', 29.03, 0.50, 22.47, false, 69, 11, 6, 22.85, 9.10, 16.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 8, 'AXM480', 33.21, 0.49, 22.28, false, 107, 18, 9, 20.36, 8.54, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 12, 'AXM480', 28.66, 0.49, 22.36, false, 68, 10, 12, 16.88, 8.90, 15.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 16, 'AXM480', 27.84, 0.50, 22.08, false, 140, 20, 5, 17.37, 8.95, 13.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 20, 'AXM480', 30.26, 0.51, 22.30, false, 63, 11, 14, 24.20, 8.37, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 4, 'AXM480', 29.68, 0.51, 22.11, false, 125, 20, 14, 22.02, 8.08, 12.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 8, 'AXM480', 27.36, 0.50, 22.41, false, 104, 20, 19, 21.70, 9.23, 21.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 12, 'AXM480', 30.25, 0.49, 22.01, false, 88, 14, 7, 22.17, 8.28, 12.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 16, 'AXM480', 27.89, 0.50, 22.12, false, 76, 15, 15, 20.88, 8.29, 8.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 20, 'AXM480', 30.91, 0.48, 22.29, false, 127, 20, 12, 25.69, 8.93, 19.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 4, 'AXM480', 31.34, 0.51, 22.07, false, 59, 12, 8, 25.23, 8.37, 15.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 11, 'AXM479', 30.63, 0.50, 22.29, false, 64, 12, 4, 15.16, 8.39, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 15, 'AXM479', 32.03, 0.53, 22.32, false, 59, 12, 9, 23.21, 8.38, 20.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 19, 'AXM479', 33.11, 0.49, 22.36, false, 104, 17, 12, 24.60, 8.57, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 3, 'AXM479', 23.58, 0.98, 20.44, false, 139, 14, 23, 17.90, 11.63, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 7, 'AXM479', 23.61, 1.03, 21.18, false, 182, 20, 34, 20.02, 12.27, 17.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 11, 'AXM479', 23.65, 0.99, 21.92, false, 138, 17, 27, 20.91, 12.40, 19.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 15, 'AXM479', 24.37, 1.01, 20.02, false, 145, 15, 4, 21.71, 11.85, 12.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 19, 'AXM479', 23.93, 0.97, 21.30, false, 176, 20, 6, 21.86, 12.33, 16.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 12, 'AXM480', 30.41, 0.51, 22.30, false, 59, 12, 9, 18.98, 8.80, 14.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 14, 'AXM478', 31.08, 0.52, 22.07, false, 144, 20, 23, 15.78, 8.40, 12.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 18, 'AXM478', 31.67, 0.51, 22.45, false, 105, 18, 12, 19.35, 8.28, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 2, 'AXM478', 24.16, 1.00, 20.32, false, 173, 20, 24, 19.28, 12.28, 16.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 6, 'AXM478', 24.45, 0.99, 21.36, false, 100, 11, 9, 21.83, 11.89, 18.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 10, 'AXM478', 24.19, 1.02, 20.08, false, 191, 20, 33, 18.49, 12.40, 14.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 14, 'AXM478', 23.85, 0.98, 21.49, false, 105, 11, 16, 28.24, 12.15, 25.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 18, 'AXM478', 24.26, 1.00, 20.38, false, 197, 20, 4, 18.35, 12.28, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 2, 'AXM478', 23.69, 1.01, 21.40, false, 175, 20, 36, 23.05, 12.46, 12.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 16, 'AXM480', 33.35, 0.49, 22.12, false, 116, 20, 25, 23.57, 8.51, 12.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 20, 'AXM480', 26.46, 0.51, 22.39, false, 65, 13, 11, 26.32, 7.94, 17.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 4, 'AXM480', 24.43, 0.98, 21.34, false, 187, 19, 4, 29.75, 12.33, 14.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 8, 'AXM480', 24.43, 1.03, 22.08, false, 164, 20, 5, 23.56, 12.06, 20.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 12, 'AXM480', 23.97, 1.02, 20.89, false, 170, 20, 9, 25.93, 11.85, 18.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 16, 'AXM480', 24.33, 0.99, 21.38, false, 177, 20, 16, 20.43, 11.84, 12.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 20, 'AXM480', 23.72, 1.02, 20.08, false, 160, 19, 3, 29.95, 12.38, 29.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 4, 'AXM480', 24.34, 0.99, 21.91, false, 191, 20, 5, 22.84, 12.18, 18.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 3, 'AXM479', 23.69, 1.03, 20.16, false, 170, 20, 34, 19.69, 12.06, 12.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 7, 'AXM479', 24.20, 1.03, 20.30, false, 199, 20, 9, 19.93, 12.33, 15.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 11, 'AXM479', 23.88, 0.98, 21.48, false, 198, 20, 28, 22.09, 12.33, 16.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 15, 'AXM479', 23.78, 0.98, 21.14, false, 107, 11, 14, 20.69, 11.84, 12.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 19, 'AXM479', 23.78, 0.99, 21.09, false, 126, 13, 19, 24.33, 11.61, 21.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 3, 'AXM479', 24.39, 1.00, 20.37, false, 181, 20, 10, 28.26, 11.68, 20.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 7, 'AXM479', 23.68, 1.00, 21.46, false, 178, 20, 28, 27.69, 12.31, 27.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 11, 'AXM479', 23.57, 0.99, 21.23, false, 165, 20, 32, 19.68, 12.22, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 15, 'AXM479', 24.02, 0.99, 20.72, false, 154, 16, 14, 18.83, 11.81, 16.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 19, 'AXM479', 24.08, 0.98, 21.42, false, 165, 20, 20, 26.53, 12.36, 24.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 8, 'AXM480', 24.05, 0.98, 20.90, false, 80, 10, 11, 28.27, 11.80, 27.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 6, 'AXM478', 24.22, 0.99, 20.15, false, 147, 17, 18, 19.73, 11.95, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 10, 'AXM478', 24.12, 1.00, 20.56, false, 174, 19, 29, 27.37, 12.33, 13.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 14, 'AXM478', 23.74, 1.03, 22.01, false, 152, 17, 19, 24.95, 11.66, 14.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 18, 'AXM478', 24.26, 1.01, 21.81, false, 169, 18, 6, 17.68, 12.18, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 2, 'AXM478', 23.58, 1.02, 22.07, false, 141, 16, 16, 28.74, 11.71, 16.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 6, 'AXM478', 23.66, 0.99, 21.04, false, 169, 20, 30, 23.95, 12.20, 12.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 10, 'AXM478', 23.91, 0.99, 20.81, false, 171, 20, 19, 17.22, 11.92, 14.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 14, 'AXM478', 23.97, 1.03, 20.97, false, 168, 20, 22, 22.91, 11.71, 12.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 18, 'AXM478', 23.56, 1.03, 21.76, false, 184, 20, 32, 28.85, 11.89, 16.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 12, 'AXM480', 23.76, 1.02, 21.21, false, 95, 10, 19, 19.50, 11.72, 16.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 16, 'AXM480', 24.10, 0.99, 20.39, false, 178, 20, 6, 19.10, 11.88, 15.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 20, 'AXM480', 23.53, 1.00, 20.57, false, 179, 20, 37, 20.54, 11.88, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 4, 'AXM480', 24.20, 0.99, 21.32, false, 189, 20, 10, 18.38, 11.57, 15.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 8, 'AXM480', 23.86, 0.99, 21.19, false, 103, 12, 22, 26.15, 12.11, 23.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 12, 'AXM480', 24.00, 1.00, 21.65, false, 198, 20, 22, 20.94, 12.06, 19.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 16, 'AXM480', 23.76, 1.02, 20.05, false, 195, 20, 5, 28.01, 12.46, 13.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 20, 'AXM480', 24.16, 0.97, 20.47, false, 164, 20, 13, 21.08, 12.21, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 3, 'AXM479', 24.66, 10.00, 24.21, false, 141, 14, 24, 18.10, 11.86, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 7, 'AXM479', 26.02, 9.72, 24.78, false, 183, 20, 34, 20.10, 12.40, 17.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 11, 'AXM479', 26.57, 10.49, 25.02, false, 138, 18, 28, 21.01, 12.64, 19.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 15, 'AXM479', 26.22, 9.96, 24.51, false, 146, 15, 4, 21.79, 12.24, 12.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 19, 'AXM479', 23.93, 9.53, 24.62, false, 178, 20, 7, 21.98, 12.42, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 3, 'AXM479', 24.38, 9.93, 25.52, false, 171, 20, 35, 19.72, 12.07, 12.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 7, 'AXM479', 26.54, 10.10, 25.25, false, 199, 20, 10, 20.04, 12.61, 15.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 11, 'AXM479', 26.07, 9.51, 24.20, false, 198, 20, 28, 22.28, 12.36, 16.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 15, 'AXM479', 25.41, 10.22, 24.98, false, 107, 11, 14, 20.70, 12.04, 12.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 19, 'AXM479', 26.20, 10.35, 24.04, false, 128, 13, 20, 24.37, 11.66, 21.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 3, 'AXM479', 24.57, 10.14, 24.60, false, 183, 20, 11, 28.31, 12.03, 20.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 7, 'AXM479', 27.22, 9.82, 24.20, false, 180, 20, 29, 27.88, 12.45, 27.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 11, 'AXM479', 25.92, 9.88, 24.81, false, 165, 20, 33, 19.78, 12.26, 16.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 15, 'AXM479', 26.26, 9.83, 25.81, false, 155, 16, 15, 18.89, 12.14, 16.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 19, 'AXM479', 27.85, 10.32, 25.43, false, 166, 20, 20, 26.57, 12.68, 24.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 4, 'AXM480', 26.21, 9.63, 24.04, false, 187, 20, 4, 29.77, 12.38, 14.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 2, 'AXM478', 25.08, 10.12, 24.31, false, 175, 20, 25, 19.29, 12.48, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 6, 'AXM478', 26.00, 10.41, 25.84, false, 101, 12, 9, 21.96, 11.92, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 10, 'AXM478', 24.64, 9.95, 24.31, false, 192, 20, 34, 18.66, 12.46, 14.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 14, 'AXM478', 26.68, 10.23, 24.69, false, 105, 12, 16, 28.27, 12.52, 25.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 18, 'AXM478', 27.96, 10.21, 25.64, false, 198, 20, 5, 18.44, 12.54, 14.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 2, 'AXM478', 25.27, 10.49, 24.57, false, 175, 20, 37, 23.24, 12.57, 12.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 6, 'AXM478', 24.64, 9.89, 25.49, false, 148, 17, 18, 19.93, 12.07, 15.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 10, 'AXM478', 26.99, 9.94, 24.69, false, 176, 19, 30, 27.44, 12.54, 13.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 14, 'AXM478', 25.50, 10.23, 25.48, false, 154, 18, 19, 25.07, 11.86, 14.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 18, 'AXM478', 24.57, 9.64, 25.25, false, 170, 18, 7, 17.69, 12.20, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 2, 'AXM478', 25.74, 9.69, 25.70, false, 143, 17, 16, 28.84, 11.72, 16.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 6, 'AXM478', 26.74, 10.24, 25.72, false, 170, 20, 31, 23.97, 12.24, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 10, 'AXM478', 25.99, 9.81, 25.71, false, 172, 20, 19, 17.35, 12.16, 14.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 14, 'AXM478', 27.42, 10.28, 24.83, false, 169, 20, 23, 23.07, 11.91, 12.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 18, 'AXM478', 25.47, 9.88, 24.46, false, 186, 20, 33, 28.95, 11.91, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 8, 'AXM480', 28.38, 10.45, 25.16, false, 166, 20, 5, 23.63, 12.45, 20.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 12, 'AXM480', 26.93, 10.27, 25.76, false, 172, 20, 10, 26.12, 12.01, 18.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 16, 'AXM480', 24.64, 10.48, 25.35, false, 178, 20, 17, 20.55, 12.00, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 20, 'AXM480', 25.77, 9.50, 24.51, false, 162, 20, 4, 30.02, 12.40, 29.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 4, 'AXM480', 26.63, 9.67, 24.70, false, 191, 20, 6, 22.95, 12.55, 19.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 8, 'AXM480', 26.54, 10.27, 25.84, false, 80, 10, 12, 28.36, 12.09, 27.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 12, 'AXM480', 23.78, 10.16, 24.06, false, 95, 10, 20, 19.59, 11.87, 16.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 16, 'AXM480', 26.46, 9.96, 25.18, false, 178, 20, 7, 19.17, 11.89, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 20, 'AXM480', 26.92, 9.58, 25.05, false, 181, 20, 37, 20.66, 12.25, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 4, 'AXM480', 26.86, 9.79, 24.81, false, 190, 20, 10, 18.54, 11.82, 15.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 8, 'AXM480', 24.75, 9.82, 25.15, false, 104, 12, 22, 26.31, 12.42, 23.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 12, 'AXM480', 25.28, 9.59, 25.06, false, 200, 20, 23, 21.08, 12.09, 19.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 16, 'AXM480', 26.76, 9.57, 24.11, false, 195, 20, 5, 28.02, 12.85, 13.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 20, 'AXM480', 24.62, 10.12, 25.01, false, 164, 20, 14, 21.26, 12.44, 15.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 3, 'AXM479', 26.44, 7.05, 26.13, false, 141, 15, 24, 18.14, 12.20, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 7, 'AXM479', 28.42, 8.83, 26.99, false, 185, 20, 35, 20.18, 12.49, 17.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 11, 'AXM479', 30.54, 7.58, 27.10, false, 139, 19, 28, 21.07, 12.76, 19.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 15, 'AXM479', 26.46, 7.99, 26.11, false, 146, 15, 4, 21.81, 12.48, 12.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 19, 'AXM479', 24.74, 7.20, 26.11, false, 178, 20, 7, 22.11, 12.79, 16.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 3, 'AXM479', 28.14, 7.71, 26.35, false, 172, 20, 36, 19.85, 12.23, 12.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 7, 'AXM479', 29.47, 7.54, 26.90, false, 199, 20, 11, 20.20, 12.89, 16.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 11, 'AXM479', 28.35, 8.35, 26.07, false, 200, 20, 28, 22.42, 12.65, 16.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 15, 'AXM479', 26.29, 8.51, 26.66, false, 109, 12, 14, 20.83, 12.34, 12.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 19, 'AXM479', 30.20, 8.54, 27.48, false, 130, 13, 20, 24.55, 11.75, 22.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 3, 'AXM479', 28.34, 7.68, 26.60, false, 184, 20, 12, 28.41, 12.14, 20.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 7, 'AXM479', 29.92, 8.57, 26.35, false, 181, 20, 29, 27.98, 12.82, 27.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 2, 'AXM478', 28.24, 8.97, 27.51, false, 177, 20, 25, 19.45, 12.65, 16.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 6, 'AXM478', 28.44, 8.94, 27.68, false, 102, 12, 9, 22.14, 12.09, 18.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 10, 'AXM478', 25.96, 7.45, 27.06, false, 194, 20, 34, 18.68, 12.60, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 14, 'AXM478', 28.99, 8.93, 26.68, false, 105, 12, 16, 28.32, 12.56, 25.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 18, 'AXM478', 28.39, 7.30, 26.22, false, 198, 20, 5, 18.44, 12.64, 15.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 2, 'AXM478', 28.96, 8.04, 27.01, false, 175, 20, 37, 23.43, 12.69, 12.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 6, 'AXM478', 25.12, 7.39, 26.14, false, 150, 18, 18, 19.96, 12.25, 15.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 10, 'AXM478', 30.26, 7.49, 26.74, false, 177, 20, 30, 27.64, 12.84, 13.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 14, 'AXM478', 26.79, 7.43, 26.98, false, 156, 19, 19, 25.24, 12.12, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 18, 'AXM478', 27.85, 7.63, 27.27, false, 171, 19, 8, 17.72, 12.23, 14.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 2, 'AXM478', 27.03, 7.67, 27.26, false, 143, 18, 16, 28.96, 12.02, 16.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 6, 'AXM478', 29.12, 8.70, 26.23, false, 171, 20, 31, 23.97, 12.48, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 4, 'AXM480', 27.40, 8.97, 26.35, false, 189, 20, 4, 29.94, 12.60, 15.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 8, 'AXM480', 28.59, 7.55, 26.84, false, 168, 20, 6, 23.82, 12.51, 20.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 12, 'AXM480', 29.73, 7.95, 27.13, false, 174, 20, 10, 26.20, 12.15, 19.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 16, 'AXM480', 27.10, 8.05, 26.81, false, 178, 20, 17, 20.75, 12.16, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 20, 'AXM480', 25.95, 8.04, 26.75, false, 163, 20, 5, 30.19, 12.65, 29.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 4, 'AXM480', 28.87, 7.36, 26.16, false, 191, 20, 7, 23.06, 12.73, 19.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 8, 'AXM480', 30.31, 7.13, 26.21, false, 81, 10, 13, 28.56, 12.10, 27.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 12, 'AXM480', 24.18, 8.69, 27.61, false, 95, 10, 21, 19.62, 12.25, 16.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 16, 'AXM480', 27.15, 8.38, 26.19, false, 180, 20, 7, 19.28, 11.94, 15.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 20, 'AXM480', 28.46, 7.68, 27.19, false, 181, 20, 38, 20.78, 12.55, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 4, 'AXM480', 30.00, 7.24, 26.59, false, 192, 20, 11, 18.61, 11.90, 15.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 11, 'AXM479', 26.08, 7.10, 26.51, false, 165, 20, 33, 19.90, 12.34, 16.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 15, 'AXM479', 26.87, 8.95, 26.75, false, 157, 16, 15, 18.93, 12.35, 16.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 19, 'AXM479', 30.61, 8.63, 27.53, false, 167, 20, 20, 26.73, 12.90, 24.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 3, 'AXM479', 29.07, 0.52, 22.04, false, 141, 15, 25, 18.20, 12.54, 15.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 7, 'AXM479', 31.15, 0.51, 22.38, false, 187, 20, 35, 20.19, 12.86, 17.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 11, 'AXM479', 31.95, 0.51, 22.25, false, 141, 20, 29, 21.19, 12.96, 19.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 15, 'AXM479', 28.74, 0.49, 22.41, false, 148, 16, 5, 21.82, 12.56, 12.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 19, 'AXM479', 26.68, 0.52, 22.47, false, 178, 20, 8, 22.21, 13.11, 16.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 12, 'AXM480', 25.99, 8.64, 26.11, false, 201, 20, 23, 21.20, 12.22, 19.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 14, 'AXM478', 28.00, 7.41, 27.01, false, 169, 20, 24, 23.17, 12.07, 12.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 18, 'AXM478', 26.89, 8.13, 26.44, false, 187, 20, 33, 28.95, 12.26, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 2, 'AXM478', 31.32, 0.48, 22.42, false, 178, 20, 26, 19.57, 12.70, 16.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 6, 'AXM478', 31.33, 0.50, 22.10, false, 102, 12, 9, 22.32, 12.36, 19.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 10, 'AXM478', 27.36, 0.48, 22.21, false, 194, 20, 35, 18.77, 12.68, 14.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 14, 'AXM478', 31.31, 0.50, 22.32, false, 107, 12, 16, 28.51, 12.85, 25.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 18, 'AXM478', 29.15, 0.48, 22.44, false, 198, 20, 6, 18.49, 12.73, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 2, 'AXM478', 29.20, 0.51, 22.38, false, 175, 20, 37, 23.47, 12.96, 13.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 16, 'AXM480', 29.19, 8.00, 27.29, false, 197, 20, 6, 28.17, 13.04, 13.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 20, 'AXM480', 26.84, 8.08, 27.18, false, 165, 20, 15, 21.31, 12.58, 15.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 4, 'AXM480', 28.16, 0.49, 22.01, false, 189, 20, 5, 30.10, 12.90, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 8, 'AXM480', 30.94, 0.53, 22.13, false, 168, 20, 7, 23.88, 12.56, 20.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 12, 'AXM480', 30.30, 0.51, 22.46, false, 174, 20, 10, 26.37, 12.34, 19.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 16, 'AXM480', 30.75, 0.47, 22.05, false, 179, 20, 17, 20.75, 12.25, 12.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 20, 'AXM480', 29.80, 0.49, 22.34, false, 163, 20, 5, 30.38, 12.84, 29.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 4, 'AXM480', 31.49, 0.49, 22.26, false, 191, 20, 8, 23.20, 12.76, 19.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 3, 'AXM479', 30.47, 0.50, 22.28, false, 174, 20, 36, 19.89, 12.57, 12.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 7, 'AXM479', 33.07, 0.50, 22.47, false, 199, 20, 12, 20.33, 12.89, 16.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 11, 'AXM479', 30.76, 0.48, 22.18, false, 202, 20, 28, 22.60, 12.90, 16.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 15, 'AXM479', 27.56, 0.48, 22.02, false, 109, 12, 15, 20.97, 12.67, 12.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 19, 'AXM479', 30.39, 0.53, 22.54, false, 130, 14, 21, 24.56, 12.04, 22.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 3, 'AXM479', 29.36, 0.49, 22.25, false, 184, 20, 13, 28.52, 12.25, 20.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 7, 'AXM479', 30.62, 0.50, 22.14, false, 183, 20, 29, 28.03, 13.04, 27.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 11, 'AXM479', 26.89, 0.50, 22.30, false, 165, 20, 34, 20.00, 12.42, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 15, 'AXM479', 28.05, 0.52, 22.04, false, 157, 17, 15, 19.12, 12.41, 16.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 19, 'AXM479', 34.27, 0.47, 22.44, false, 167, 20, 20, 26.77, 13.22, 24.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 8, 'AXM480', 32.00, 0.48, 22.30, false, 81, 11, 13, 28.76, 12.34, 27.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 6, 'AXM478', 27.72, 0.48, 22.45, false, 152, 19, 19, 20.01, 12.49, 15.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 10, 'AXM478', 31.52, 0.52, 22.02, false, 179, 20, 31, 27.69, 12.95, 13.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 14, 'AXM478', 29.39, 0.53, 22.47, false, 157, 20, 19, 25.36, 12.52, 14.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 18, 'AXM478', 31.18, 0.53, 22.49, false, 172, 19, 9, 17.75, 12.43, 14.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 2, 'AXM478', 27.33, 0.52, 22.44, false, 144, 19, 17, 29.00, 12.10, 16.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 6, 'AXM478', 29.81, 0.52, 22.21, false, 172, 20, 31, 24.05, 12.58, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 10, 'AXM478', 30.43, 0.53, 22.39, false, 175, 20, 21, 17.57, 12.61, 15.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 14, 'AXM478', 31.66, 0.52, 22.33, false, 170, 20, 25, 23.33, 12.45, 12.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 18, 'AXM478', 28.78, 0.51, 22.45, false, 187, 20, 34, 29.01, 12.54, 16.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 12, 'AXM480', 27.90, 0.52, 22.03, false, 96, 10, 22, 19.66, 12.54, 16.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 16, 'AXM480', 30.32, 0.47, 22.25, false, 181, 20, 7, 19.43, 11.94, 15.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 20, 'AXM480', 29.16, 0.49, 22.03, false, 183, 20, 39, 20.93, 12.91, 14.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 4, 'AXM480', 30.82, 0.49, 22.16, false, 194, 20, 11, 18.75, 12.26, 15.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 8, 'AXM480', 28.58, 0.52, 22.36, false, 107, 14, 23, 26.53, 12.90, 23.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 12, 'AXM480', 29.57, 0.52, 22.29, false, 202, 20, 23, 21.21, 12.54, 19.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 16, 'AXM480', 31.78, 0.49, 22.21, false, 197, 20, 7, 28.27, 13.05, 13.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 20, 'AXM480', 27.35, 0.50, 22.07, false, 165, 20, 15, 21.33, 12.59, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 3, 'AXM479', 23.91, 0.99, 20.34, false, 159, 14, 32, 31.63, 15.75, 30.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 7, 'AXM479', 23.80, 0.99, 21.89, false, 241, 20, 49, 31.57, 16.46, 21.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 11, 'AXM479', 24.29, 1.01, 20.19, false, 211, 17, 31, 31.37, 15.50, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 15, 'AXM479', 23.81, 1.02, 21.96, false, 181, 15, 25, 31.66, 16.32, 28.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 19, 'AXM479', 24.17, 0.98, 21.53, false, 232, 20, 42, 23.42, 16.22, 21.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 3, 'AXM479', 23.76, 1.00, 21.79, false, 237, 20, 18, 24.29, 15.94, 18.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 7, 'AXM479', 24.48, 1.01, 21.78, false, 238, 20, 34, 31.02, 16.26, 17.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 11, 'AXM479', 24.36, 1.00, 21.01, false, 260, 20, 9, 28.98, 15.75, 17.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 15, 'AXM479', 24.45, 1.00, 20.99, false, 128, 11, 22, 23.51, 15.80, 18.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 19, 'AXM479', 24.27, 1.01, 21.31, false, 164, 13, 8, 30.38, 15.80, 20.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 3, 'AXM479', 24.40, 1.02, 20.15, false, 252, 20, 18, 31.79, 15.77, 20.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 7, 'AXM479', 24.27, 1.03, 21.97, false, 239, 20, 29, 28.18, 15.57, 25.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 11, 'AXM479', 24.13, 0.97, 20.22, false, 235, 20, 9, 23.31, 16.07, 18.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 15, 'AXM479', 24.02, 0.98, 21.11, false, 194, 16, 12, 31.69, 15.63, 27.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 19, 'AXM479', 24.44, 0.99, 20.18, false, 231, 20, 31, 27.14, 15.58, 20.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 4, 'AXM480', 23.62, 0.97, 20.63, false, 216, 19, 19, 27.41, 15.90, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 2, 'AXM478', 24.47, 1.01, 20.74, false, 228, 20, 33, 30.24, 16.23, 27.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 6, 'AXM478', 24.00, 0.98, 21.66, false, 127, 11, 25, 29.63, 16.28, 25.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 10, 'AXM478', 23.60, 0.99, 21.84, false, 239, 20, 46, 24.26, 16.38, 22.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 14, 'AXM478', 24.27, 1.01, 21.25, false, 122, 11, 18, 29.58, 16.07, 26.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 18, 'AXM478', 23.59, 1.00, 21.46, false, 240, 20, 24, 29.17, 15.82, 16.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 2, 'AXM478', 23.53, 1.01, 21.40, false, 247, 20, 6, 31.63, 16.02, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 6, 'AXM478', 23.69, 1.03, 21.01, false, 203, 17, 37, 29.35, 16.35, 23.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 10, 'AXM478', 24.42, 0.98, 20.42, false, 223, 19, 37, 21.73, 16.06, 17.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 14, 'AXM478', 24.27, 0.99, 20.79, false, 195, 17, 29, 21.58, 15.79, 17.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 18, 'AXM478', 24.20, 1.01, 22.02, false, 229, 18, 8, 33.22, 15.56, 18.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 2, 'AXM478', 23.57, 0.99, 21.79, false, 195, 16, 35, 26.34, 15.71, 23.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 6, 'AXM478', 24.25, 0.99, 20.81, false, 251, 20, 42, 30.66, 16.02, 17.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 10, 'AXM478', 24.47, 1.00, 21.02, false, 245, 20, 46, 29.71, 15.75, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 14, 'AXM478', 23.80, 0.99, 21.28, false, 242, 20, 4, 23.43, 16.05, 23.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 18, 'AXM478', 24.33, 1.00, 21.87, false, 259, 20, 10, 32.31, 16.01, 19.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 8, 'AXM480', 24.18, 1.02, 20.17, false, 256, 20, 33, 26.10, 16.11, 16.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 12, 'AXM480', 24.22, 0.98, 21.10, false, 238, 20, 17, 32.31, 15.72, 21.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 16, 'AXM480', 24.31, 0.97, 20.70, false, 226, 20, 20, 21.90, 16.13, 17.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 20, 'AXM480', 24.33, 0.98, 20.31, false, 240, 19, 47, 28.11, 16.30, 21.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 4, 'AXM480', 23.84, 0.98, 20.92, false, 241, 20, 37, 23.91, 15.88, 23.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 8, 'AXM480', 24.27, 0.97, 20.43, false, 111, 10, 9, 30.47, 15.93, 23.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 12, 'AXM480', 23.81, 1.02, 20.18, false, 113, 10, 9, 23.75, 16.34, 17.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 16, 'AXM480', 23.87, 1.02, 20.05, false, 236, 20, 7, 32.15, 15.88, 16.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 20, 'AXM480', 24.35, 0.99, 20.23, false, 255, 20, 11, 27.42, 15.81, 17.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 4, 'AXM480', 24.14, 1.02, 20.80, false, 260, 20, 4, 27.41, 15.83, 24.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 8, 'AXM480', 23.98, 1.00, 20.88, false, 138, 12, 13, 26.54, 16.50, 22.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 12, 'AXM480', 23.87, 0.97, 20.65, false, 240, 20, 30, 21.47, 16.08, 19.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 16, 'AXM480', 23.57, 1.03, 22.06, false, 245, 20, 32, 28.99, 15.59, 26.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 20, 'AXM480', 23.92, 1.02, 20.94, false, 259, 20, 41, 32.31, 16.39, 24.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 3, 'AXM479', 27.43, 10.07, 25.32, false, 159, 14, 32, 31.80, 15.89, 30.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 7, 'AXM479', 26.74, 9.94, 24.14, false, 241, 20, 50, 31.70, 16.59, 21.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 11, 'AXM479', 27.51, 10.27, 24.24, false, 213, 18, 32, 31.56, 15.69, 18.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 15, 'AXM479', 26.24, 10.17, 24.74, false, 182, 15, 26, 31.77, 16.39, 28.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 19, 'AXM479', 24.88, 9.56, 24.39, false, 234, 20, 42, 23.46, 16.46, 21.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 3, 'AXM479', 27.65, 10.02, 24.38, false, 237, 20, 18, 24.36, 16.27, 18.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 7, 'AXM479', 25.37, 9.88, 25.05, false, 238, 20, 35, 31.14, 16.62, 17.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 11, 'AXM479', 26.58, 9.97, 25.78, false, 261, 20, 9, 29.05, 15.92, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 15, 'AXM479', 27.96, 9.88, 24.98, false, 128, 11, 23, 23.55, 15.96, 18.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 19, 'AXM479', 27.25, 9.63, 24.77, false, 164, 13, 8, 30.47, 16.04, 20.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 3, 'AXM479', 24.88, 10.25, 25.40, false, 252, 20, 18, 31.96, 15.91, 20.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 7, 'AXM479', 25.84, 9.59, 24.25, false, 241, 20, 30, 28.34, 15.82, 25.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 2, 'AXM478', 27.42, 9.58, 25.80, false, 230, 20, 34, 30.33, 16.57, 27.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 6, 'AXM478', 26.78, 9.64, 25.59, false, 128, 12, 25, 29.75, 16.60, 26.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 10, 'AXM478', 26.20, 9.53, 25.17, false, 240, 20, 46, 24.37, 16.53, 22.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 14, 'AXM478', 26.11, 10.20, 25.20, false, 124, 12, 19, 29.69, 16.32, 26.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 18, 'AXM478', 25.75, 9.96, 25.42, false, 242, 20, 25, 29.21, 16.03, 16.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 2, 'AXM478', 23.99, 9.79, 25.69, false, 248, 20, 6, 31.68, 16.11, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 6, 'AXM478', 25.25, 9.94, 24.82, false, 205, 17, 38, 29.53, 16.51, 23.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 10, 'AXM478', 26.18, 9.98, 24.62, false, 223, 19, 37, 21.79, 16.45, 17.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 14, 'AXM478', 26.66, 9.79, 25.45, false, 197, 18, 30, 21.69, 15.81, 17.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 18, 'AXM478', 25.13, 9.86, 25.79, false, 230, 18, 8, 33.30, 15.80, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 2, 'AXM478', 24.39, 10.15, 25.34, false, 195, 17, 36, 26.36, 15.97, 23.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 6, 'AXM478', 26.68, 9.83, 25.55, false, 252, 20, 43, 30.81, 16.26, 17.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 4, 'AXM480', 27.18, 10.17, 25.23, false, 216, 20, 19, 27.45, 15.99, 20.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 8, 'AXM480', 26.17, 9.65, 25.73, false, 258, 20, 33, 26.14, 16.29, 16.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 12, 'AXM480', 24.29, 9.98, 24.56, false, 239, 20, 18, 32.35, 15.80, 21.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 16, 'AXM480', 26.80, 10.36, 24.33, false, 226, 20, 20, 22.06, 16.35, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 20, 'AXM480', 27.22, 10.35, 25.66, false, 240, 20, 48, 28.31, 16.48, 21.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 4, 'AXM480', 27.84, 10.28, 25.12, false, 243, 20, 38, 24.09, 16.13, 23.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 8, 'AXM480', 26.66, 10.06, 25.48, false, 111, 10, 9, 30.60, 16.13, 23.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 12, 'AXM480', 26.45, 10.48, 25.09, false, 115, 10, 10, 23.93, 16.42, 17.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 16, 'AXM480', 25.54, 9.73, 25.74, false, 238, 20, 7, 32.21, 16.06, 16.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 20, 'AXM480', 25.25, 10.49, 24.14, false, 257, 20, 12, 27.43, 16.16, 17.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 4, 'AXM480', 25.93, 9.83, 24.93, false, 260, 20, 5, 27.52, 16.05, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 11, 'AXM479', 27.89, 9.79, 24.09, false, 236, 20, 10, 23.45, 16.13, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 15, 'AXM479', 24.60, 9.65, 24.11, false, 194, 16, 13, 31.71, 15.85, 27.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 19, 'AXM479', 27.37, 9.94, 24.51, false, 232, 20, 31, 27.19, 15.62, 21.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 3, 'AXM479', 27.50, 8.18, 26.32, false, 159, 15, 33, 31.83, 16.10, 30.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 7, 'AXM479', 27.67, 7.49, 26.94, false, 242, 20, 51, 31.78, 16.99, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 11, 'AXM479', 30.07, 8.04, 27.07, false, 215, 19, 32, 31.76, 15.72, 18.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 15, 'AXM479', 28.36, 7.93, 26.13, false, 183, 15, 26, 31.96, 16.57, 28.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 19, 'AXM479', 25.48, 7.85, 26.90, false, 234, 20, 42, 23.49, 16.56, 21.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 12, 'AXM480', 24.56, 9.87, 25.16, false, 240, 20, 31, 21.63, 16.09, 19.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 14, 'AXM478', 26.05, 9.99, 25.64, false, 242, 20, 4, 23.53, 16.35, 23.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 18, 'AXM478', 25.50, 9.52, 24.71, false, 261, 20, 11, 32.38, 16.26, 19.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 2, 'AXM478', 30.61, 8.98, 27.37, false, 231, 20, 35, 30.33, 16.83, 27.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 6, 'AXM478', 27.74, 7.21, 26.68, false, 130, 12, 25, 29.89, 16.93, 26.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 10, 'AXM478', 28.22, 7.59, 26.81, false, 241, 20, 47, 24.53, 16.64, 22.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 14, 'AXM478', 29.85, 7.56, 26.24, false, 124, 12, 20, 29.77, 16.55, 26.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 18, 'AXM478', 26.56, 8.53, 26.65, false, 242, 20, 26, 29.27, 16.23, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 2, 'AXM478', 27.45, 7.67, 26.30, false, 248, 20, 6, 31.70, 16.13, 18.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 16, 'AXM480', 25.35, 9.53, 24.88, false, 245, 20, 33, 29.05, 15.84, 26.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 20, 'AXM480', 25.30, 10.25, 24.96, false, 260, 20, 42, 32.42, 16.71, 24.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 4, 'AXM480', 28.55, 7.51, 27.16, false, 216, 20, 20, 27.56, 16.24, 20.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 8, 'AXM480', 27.73, 7.01, 26.57, false, 258, 20, 34, 26.24, 16.36, 16.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 12, 'AXM480', 28.16, 7.76, 27.14, false, 239, 20, 19, 32.52, 15.81, 21.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 16, 'AXM480', 28.83, 8.60, 27.52, false, 226, 20, 21, 22.24, 16.47, 17.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 20, 'AXM480', 29.72, 8.81, 27.34, false, 241, 20, 49, 28.35, 16.83, 21.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 4, 'AXM480', 29.92, 7.03, 26.99, false, 244, 20, 39, 24.15, 16.50, 23.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 3, 'AXM479', 31.41, 8.77, 26.83, false, 238, 20, 19, 24.40, 16.47, 18.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 7, 'AXM479', 28.53, 8.57, 26.65, false, 239, 20, 36, 31.27, 16.65, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 11, 'AXM479', 27.10, 8.95, 27.52, false, 261, 20, 9, 29.15, 15.96, 18.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 15, 'AXM479', 28.20, 7.06, 26.89, false, 128, 12, 24, 23.70, 16.18, 18.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 19, 'AXM479', 27.83, 8.12, 26.47, false, 165, 13, 8, 30.65, 16.33, 20.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 3, 'AXM479', 25.86, 8.15, 26.32, false, 252, 20, 18, 32.04, 16.28, 20.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 7, 'AXM479', 27.32, 7.03, 26.04, false, 242, 20, 31, 28.51, 15.94, 25.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 11, 'AXM479', 31.41, 8.46, 26.73, false, 238, 20, 11, 23.48, 16.49, 18.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 15, 'AXM479', 25.85, 8.13, 26.94, false, 196, 16, 14, 31.78, 15.90, 27.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 19, 'AXM479', 28.92, 7.79, 26.89, false, 233, 20, 31, 27.22, 15.86, 21.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 8, 'AXM480', 30.64, 7.21, 26.48, false, 113, 10, 10, 30.79, 16.34, 23.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 6, 'AXM478', 28.97, 8.56, 27.25, false, 207, 18, 38, 29.57, 16.61, 23.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 10, 'AXM478', 29.80, 8.16, 26.14, false, 225, 20, 38, 21.87, 16.79, 17.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 14, 'AXM478', 28.40, 7.85, 27.20, false, 199, 19, 30, 21.73, 16.19, 18.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 18, 'AXM478', 28.78, 7.29, 26.78, false, 231, 19, 8, 33.34, 15.83, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 2, 'AXM478', 28.09, 8.16, 26.72, false, 196, 18, 37, 26.49, 16.20, 23.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 6, 'AXM478', 27.75, 8.42, 26.74, false, 254, 20, 43, 30.85, 16.31, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 10, 'AXM478', 28.60, 8.95, 27.22, false, 247, 20, 48, 29.96, 16.27, 22.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 14, 'AXM478', 26.32, 7.53, 27.04, false, 242, 20, 4, 23.54, 16.71, 23.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 18, 'AXM478', 27.22, 8.92, 26.46, false, 262, 20, 11, 32.49, 16.47, 19.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 12, 'AXM480', 29.98, 8.10, 26.27, false, 117, 10, 11, 24.06, 16.79, 17.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 16, 'AXM480', 26.42, 8.25, 26.35, false, 238, 20, 8, 32.31, 16.24, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 20, 'AXM480', 26.78, 8.46, 26.72, false, 257, 20, 12, 27.61, 16.51, 17.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 4, 'AXM480', 27.56, 7.11, 26.09, false, 261, 20, 6, 27.55, 16.37, 24.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 8, 'AXM480', 27.67, 8.01, 27.24, false, 142, 13, 15, 26.77, 16.92, 22.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 12, 'AXM480', 26.11, 7.20, 26.37, false, 240, 20, 32, 21.83, 16.38, 19.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 16, 'AXM480', 27.40, 7.95, 26.80, false, 247, 20, 33, 29.10, 15.90, 26.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 20, 'AXM480', 25.83, 8.23, 26.66, false, 262, 20, 43, 32.57, 16.97, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 3, 'AXM479', 29.87, 0.49, 22.18, false, 160, 15, 33, 31.93, 16.12, 30.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 7, 'AXM479', 27.98, 0.50, 22.03, false, 243, 20, 51, 31.84, 17.17, 22.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 11, 'AXM479', 31.12, 0.52, 22.44, false, 215, 20, 32, 31.80, 15.93, 18.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 15, 'AXM479', 29.48, 0.49, 22.24, false, 183, 16, 26, 31.96, 16.94, 28.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 19, 'AXM479', 28.11, 0.48, 22.30, false, 236, 20, 43, 23.58, 16.75, 21.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 3, 'AXM479', 32.67, 0.52, 22.50, false, 239, 20, 19, 24.42, 16.56, 18.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 7, 'AXM479', 31.87, 0.48, 22.36, false, 239, 20, 36, 31.41, 16.67, 18.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 11, 'AXM479', 30.34, 0.49, 22.16, false, 262, 20, 10, 29.27, 15.99, 18.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 15, 'AXM479', 28.76, 0.52, 22.52, false, 128, 12, 25, 23.82, 16.50, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 19, 'AXM479', 29.54, 0.49, 22.34, false, 165, 14, 9, 30.71, 16.50, 20.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 3, 'AXM479', 26.40, 0.53, 22.33, false, 253, 20, 19, 32.07, 16.32, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 7, 'AXM479', 27.48, 0.48, 22.38, false, 242, 20, 32, 28.52, 16.06, 25.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 11, 'AXM479', 35.37, 0.50, 22.34, false, 238, 20, 12, 23.50, 16.60, 18.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 15, 'AXM479', 28.15, 0.52, 22.39, false, 196, 17, 14, 31.93, 16.20, 27.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 19, 'AXM479', 29.79, 0.53, 22.35, false, 235, 20, 32, 27.39, 15.95, 21.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 4, 'AXM480', 32.31, 0.47, 22.35, false, 216, 20, 20, 27.64, 16.45, 20.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 2, 'AXM478', 31.00, 0.49, 22.35, false, 233, 20, 36, 30.35, 16.93, 27.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 6, 'AXM478', 30.48, 0.52, 22.16, false, 130, 12, 26, 30.01, 16.94, 26.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 10, 'AXM478', 28.63, 0.53, 22.44, false, 242, 20, 47, 24.57, 16.89, 22.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 14, 'AXM478', 33.42, 0.52, 22.32, false, 125, 12, 21, 29.77, 16.74, 26.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 18, 'AXM478', 26.63, 0.50, 22.43, false, 242, 20, 26, 29.38, 16.34, 16.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 2, 'AXM478', 31.20, 0.52, 22.50, false, 249, 20, 7, 31.85, 16.51, 18.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 6, 'AXM478', 31.02, 0.52, 22.04, false, 208, 19, 39, 29.58, 16.98, 23.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 10, 'AXM478', 31.72, 0.48, 22.00, false, 225, 20, 39, 21.98, 17.05, 17.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 14, 'AXM478', 30.44, 0.49, 22.25, false, 200, 20, 31, 21.87, 16.22, 18.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 18, 'AXM478', 32.53, 0.50, 22.39, false, 231, 19, 8, 33.39, 16.20, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 2, 'AXM478', 28.95, 0.47, 22.01, false, 197, 19, 38, 26.58, 16.24, 23.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 6, 'AXM478', 28.46, 0.47, 22.27, false, 256, 20, 44, 31.00, 16.32, 18.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 10, 'AXM478', 32.50, 0.50, 22.24, false, 247, 20, 49, 30.08, 16.28, 22.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 14, 'AXM478', 26.90, 0.50, 22.40, false, 244, 20, 4, 23.61, 16.95, 23.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 18, 'AXM478', 28.42, 0.51, 22.14, false, 264, 20, 12, 32.64, 16.73, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 8, 'AXM480', 28.54, 0.51, 22.11, false, 258, 20, 35, 26.35, 16.36, 16.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 12, 'AXM480', 31.96, 0.49, 22.04, false, 241, 20, 20, 32.66, 15.89, 21.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 16, 'AXM480', 29.33, 0.49, 22.01, false, 227, 20, 21, 22.25, 16.49, 17.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 20, 'AXM480', 30.62, 0.51, 22.02, false, 241, 20, 50, 28.45, 17.22, 21.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 4, 'AXM480', 31.90, 0.48, 22.22, false, 244, 20, 39, 24.30, 16.76, 23.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 8, 'AXM480', 31.28, 0.49, 22.36, false, 115, 11, 10, 30.91, 16.35, 23.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 12, 'AXM480', 31.04, 0.51, 22.25, false, 119, 10, 12, 24.15, 17.03, 17.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 16, 'AXM480', 27.79, 0.51, 22.36, false, 239, 20, 8, 32.37, 16.32, 16.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 20, 'AXM480', 27.84, 0.47, 22.10, false, 257, 20, 13, 27.80, 16.87, 17.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 4, 'AXM480', 29.38, 0.51, 22.40, false, 261, 20, 6, 27.59, 16.63, 24.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 8, 'AXM480', 30.66, 0.47, 22.40, false, 142, 14, 15, 26.87, 16.98, 22.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 12, 'AXM480', 26.13, 0.50, 22.30, false, 242, 20, 33, 21.93, 16.73, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 16, 'AXM480', 31.25, 0.50, 22.36, false, 247, 20, 33, 29.21, 16.13, 26.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 20, 'AXM480', 27.46, 0.52, 22.30, false, 263, 20, 44, 32.67, 17.18, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 1, 'AXM477', 24.19, 0.97, 21.14, false, 35, 5, 2, 8.70, 1.71, 3.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 5, 'AXM477', 24.41, 0.97, 20.80, false, 10, 16, 2, 16.32, 1.81, 3.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 9, 'AXM477', 23.93, 1.01, 20.62, false, 0, 0, 0, 17.84, 1.85, 15.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 13, 'AXM477', 24.28, 1.02, 20.73, false, 6, 11, 0, 16.89, 2.35, 4.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 17, 'AXM477', 24.34, 1.03, 20.09, false, 2, 3, 0, 17.56, 1.73, 14.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 1, 'AXM477', 24.50, 1.01, 20.53, false, 24, 9, 4, 8.70, 1.62, 6.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 5, 'AXM477', 23.95, 1.01, 21.19, false, 4, 15, 0, 9.79, 1.64, 5.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 9, 'AXM477', 23.50, 1.02, 21.51, false, 29, 19, 4, 8.04, 1.50, 2.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 13, 'AXM477', 23.98, 1.00, 21.14, false, 8, 5, 1, 11.28, 2.50, 8.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 17, 'AXM477', 24.22, 1.01, 20.87, false, 22, 14, 4, 12.65, 1.92, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 1, 'AXM477', 24.17, 1.01, 20.01, false, 22, 0, 3, 8.70, 1.55, 8.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 5, 'AXM477', 24.21, 0.99, 20.51, false, 2, 18, 0, 10.44, 1.57, 10.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 9, 'AXM477', 24.46, 0.98, 21.54, false, 5, 8, 0, 8.67, 1.74, 7.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 13, 'AXM477', 23.97, 0.98, 20.22, false, 5, 7, 0, 8.52, 2.27, 4.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 17, 'AXM477', 24.16, 1.00, 20.80, false, 0, 2, 0, 19.99, 1.65, 17.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 1, 'AXM477', 26.66, 9.82, 25.10, false, 37, 5, 2, 8.72, 1.74, 3.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 5, 'AXM477', 25.54, 9.67, 24.08, false, 12, 17, 2, 16.40, 1.95, 3.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 9, 'AXM477', 27.66, 10.03, 24.44, false, 1, 1, 1, 17.87, 2.04, 15.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 13, 'AXM477', 25.91, 9.68, 24.85, false, 7, 12, 0, 17.05, 2.53, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 17, 'AXM477', 27.54, 9.81, 25.40, false, 4, 3, 1, 17.60, 1.92, 14.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 1, 'AXM477', 27.08, 9.53, 25.34, false, 25, 10, 4, 8.74, 1.62, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 5, 'AXM477', 26.90, 10.17, 24.19, false, 6, 15, 1, 9.80, 1.97, 5.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 9, 'AXM477', 27.03, 9.89, 25.84, false, 31, 20, 5, 8.09, 1.79, 2.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 13, 'AXM477', 24.62, 9.65, 24.99, false, 10, 5, 1, 11.28, 2.63, 8.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 17, 'AXM477', 27.69, 10.49, 24.05, false, 22, 15, 5, 12.70, 2.29, 4.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 1, 'AXM477', 25.42, 9.57, 25.18, false, 22, 1, 4, 8.84, 1.89, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 5, 'AXM477', 25.84, 10.21, 24.70, false, 4, 18, 0, 10.50, 1.93, 10.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 9, 'AXM477', 24.97, 10.30, 25.72, false, 5, 8, 0, 8.87, 2.09, 7.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 13, 'AXM477', 24.05, 10.16, 25.51, false, 6, 7, 0, 8.53, 2.66, 4.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 17, 'AXM477', 25.59, 10.08, 25.65, false, 1, 2, 1, 20.12, 2.01, 17.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 1, 'AXM477', 28.08, 8.26, 26.03, false, 38, 6, 2, 8.77, 1.95, 3.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 5, 'AXM477', 26.29, 8.38, 26.91, false, 14, 18, 3, 16.42, 2.34, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 9, 'AXM477', 28.29, 7.91, 26.22, false, 1, 2, 2, 17.97, 2.27, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 13, 'AXM477', 27.18, 8.86, 26.41, false, 9, 12, 0, 17.20, 2.92, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 17, 'AXM477', 31.50, 8.25, 26.97, false, 4, 3, 2, 17.60, 2.22, 14.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 1, 'AXM477', 28.15, 7.22, 26.51, false, 27, 11, 4, 8.86, 1.63, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 5, 'AXM477', 29.99, 7.60, 26.59, false, 8, 15, 2, 9.81, 2.09, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 9, 'AXM477', 29.01, 8.76, 26.89, false, 31, 20, 5, 8.20, 1.83, 2.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 13, 'AXM477', 27.93, 7.05, 26.68, false, 12, 5, 1, 11.44, 2.66, 8.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 17, 'AXM477', 29.46, 7.06, 26.07, false, 24, 16, 5, 12.78, 2.52, 5.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 1, 'AXM477', 26.14, 7.76, 27.27, false, 24, 2, 5, 8.90, 2.29, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 5, 'AXM477', 27.89, 7.04, 26.22, false, 6, 19, 0, 10.62, 2.23, 10.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 9, 'AXM477', 27.60, 7.23, 26.83, false, 6, 9, 0, 8.92, 2.48, 7.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 13, 'AXM477', 27.15, 7.40, 26.70, false, 6, 8, 0, 8.65, 3.00, 4.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 17, 'AXM477', 28.61, 7.16, 26.37, false, 3, 2, 1, 20.14, 2.03, 17.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 1, 'AXM477', 28.70, 0.50, 22.24, false, 38, 7, 3, 8.79, 2.01, 3.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 5, 'AXM477', 26.39, 0.52, 22.03, false, 14, 19, 4, 16.46, 2.59, 3.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 9, 'AXM477', 29.61, 0.53, 22.33, false, 1, 3, 3, 17.97, 2.59, 15.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 13, 'AXM477', 29.61, 0.51, 22.20, false, 10, 13, 1, 17.26, 3.23, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 17, 'AXM477', 33.95, 0.53, 22.25, false, 4, 3, 3, 17.77, 2.54, 14.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 1, 'AXM477', 31.37, 0.49, 22.45, false, 27, 12, 4, 8.88, 1.97, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 5, 'AXM477', 31.01, 0.53, 22.24, false, 8, 16, 3, 9.98, 2.11, 5.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 9, 'AXM477', 30.76, 0.52, 22.18, false, 33, 20, 6, 8.30, 2.11, 2.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 13, 'AXM477', 28.85, 0.53, 22.16, false, 13, 5, 2, 11.45, 2.91, 8.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 17, 'AXM477', 31.64, 0.52, 22.42, false, 24, 17, 6, 12.95, 2.64, 5.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 1, 'AXM477', 26.52, 0.52, 22.46, false, 24, 3, 6, 9.06, 2.58, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 5, 'AXM477', 29.50, 0.52, 22.41, false, 7, 19, 0, 10.63, 2.50, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 9, 'AXM477', 28.50, 0.50, 22.46, false, 8, 10, 0, 9.10, 2.56, 7.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 13, 'AXM477', 28.08, 0.48, 22.12, false, 7, 9, 1, 8.67, 3.18, 4.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 17, 'AXM477', 30.56, 0.53, 22.26, false, 3, 2, 2, 20.27, 2.09, 17.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 1, 'AXM477', 24.31, 1.02, 21.43, false, 9, 17, 1, 8.70, 2.39, 8.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 5, 'AXM477', 23.91, 1.00, 20.82, false, 9, 6, 1, 18.39, 2.40, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 9, 'AXM477', 24.44, 1.03, 20.08, false, 10, 6, 1, 14.81, 2.26, 7.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 13, 'AXM477', 23.78, 0.99, 20.40, false, 2, 3, 0, 8.88, 1.55, 3.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 17, 'AXM477', 23.84, 0.98, 21.22, false, 4, 5, 0, 15.32, 2.35, 5.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 1, 'AXM477', 23.79, 0.99, 20.56, false, 41, 2, 3, 8.70, 2.15, 8.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 5, 'AXM477', 24.42, 1.00, 21.60, false, 7, 7, 1, 10.53, 1.92, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 9, 'AXM477', 23.95, 0.97, 21.82, false, 1, 1, 0, 17.01, 1.93, 13.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 13, 'AXM477', 24.01, 0.99, 21.18, false, 11, 12, 1, 13.93, 1.55, 11.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 17, 'AXM477', 23.79, 0.98, 21.48, false, 14, 15, 1, 12.47, 2.32, 4.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 1, 'AXM477', 23.76, 0.98, 21.47, false, 27, 20, 2, 8.70, 1.85, 8.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 5, 'AXM477', 24.39, 1.01, 21.92, false, 2, 13, 0, 19.59, 1.93, 17.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 9, 'AXM477', 24.42, 1.02, 21.60, false, 15, 14, 3, 19.82, 1.58, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 13, 'AXM477', 23.85, 1.02, 21.05, false, 8, 7, 0, 9.02, 2.25, 4.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 17, 'AXM477', 24.41, 1.01, 21.22, false, 13, 16, 1, 11.23, 2.38, 11.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 1, 'AXM477', 25.32, 9.64, 25.37, false, 11, 18, 2, 8.89, 2.53, 8.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 5, 'AXM477', 26.32, 10.05, 24.19, false, 10, 6, 1, 18.42, 2.42, 16.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 9, 'AXM477', 27.24, 10.38, 25.10, false, 10, 6, 2, 14.92, 2.57, 7.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 13, 'AXM477', 24.79, 10.18, 24.66, false, 2, 4, 1, 9.04, 1.93, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 17, 'AXM477', 27.11, 9.93, 24.11, false, 6, 5, 0, 15.36, 2.42, 5.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 1, 'AXM477', 26.99, 10.46, 25.03, false, 42, 2, 4, 8.70, 2.21, 8.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 5, 'AXM477', 24.49, 9.84, 25.39, false, 9, 8, 2, 10.57, 2.16, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 9, 'AXM477', 24.68, 9.89, 25.31, false, 1, 1, 0, 17.06, 1.99, 13.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 13, 'AXM477', 24.86, 10.26, 24.95, false, 13, 13, 1, 13.98, 1.66, 11.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 17, 'AXM477', 25.35, 10.15, 24.71, false, 16, 15, 1, 12.48, 2.64, 4.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 1, 'AXM477', 24.06, 9.74, 24.75, false, 29, 20, 2, 8.77, 2.20, 8.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 5, 'AXM477', 28.30, 10.31, 24.44, false, 2, 13, 0, 19.77, 2.28, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 9, 'AXM477', 28.19, 10.12, 24.32, false, 15, 15, 4, 19.93, 1.93, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 13, 'AXM477', 27.76, 10.36, 25.46, false, 10, 8, 0, 9.14, 2.65, 4.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 17, 'AXM477', 27.18, 10.18, 24.76, false, 14, 16, 1, 11.25, 2.65, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 1, 'AXM477', 28.10, 8.83, 26.45, false, 11, 19, 2, 8.95, 2.57, 8.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 5, 'AXM477', 30.16, 8.98, 26.51, false, 10, 7, 1, 18.57, 2.74, 16.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 9, 'AXM477', 27.94, 7.89, 27.07, false, 12, 7, 3, 14.95, 2.91, 7.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 13, 'AXM477', 25.62, 8.28, 27.05, false, 2, 4, 1, 9.13, 2.21, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 17, 'AXM477', 28.85, 8.87, 27.30, false, 8, 6, 1, 15.55, 2.63, 6.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 1, 'AXM477', 30.97, 8.40, 26.69, false, 42, 2, 4, 8.78, 2.41, 8.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 5, 'AXM477', 25.32, 7.57, 26.19, false, 9, 9, 3, 10.69, 2.35, 3.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 9, 'AXM477', 25.26, 7.88, 26.39, false, 2, 2, 1, 17.16, 2.12, 14.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 13, 'AXM477', 28.79, 8.60, 26.35, false, 13, 13, 2, 14.17, 1.71, 11.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 17, 'AXM477', 27.14, 7.03, 26.16, false, 18, 15, 2, 12.65, 2.72, 4.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 1, 'AXM477', 24.90, 8.68, 26.64, false, 30, 20, 3, 8.80, 2.39, 8.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 5, 'AXM477', 29.69, 7.37, 26.62, false, 3, 14, 0, 19.89, 2.56, 17.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 9, 'AXM477', 31.14, 8.86, 26.80, false, 17, 15, 5, 20.04, 2.01, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 13, 'AXM477', 31.37, 7.71, 27.22, false, 10, 8, 0, 9.21, 3.04, 4.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 17, 'AXM477', 30.21, 7.46, 26.75, false, 16, 16, 1, 11.41, 2.67, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 1, 'AXM477', 32.06, 0.51, 22.22, false, 11, 19, 3, 8.98, 2.61, 8.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 5, 'AXM477', 31.19, 0.50, 22.43, false, 12, 7, 1, 18.72, 3.08, 17.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 9, 'AXM477', 29.48, 0.51, 22.11, false, 13, 8, 3, 15.13, 3.08, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 13, 'AXM477', 26.83, 0.52, 22.20, false, 4, 5, 2, 9.15, 2.61, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 17, 'AXM477', 30.44, 0.50, 22.40, false, 10, 6, 1, 15.56, 2.86, 6.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 1, 'AXM477', 33.39, 0.49, 22.26, false, 42, 3, 4, 8.83, 2.81, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 5, 'AXM477', 28.80, 0.50, 22.18, false, 10, 10, 4, 10.75, 2.53, 3.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 9, 'AXM477', 26.51, 0.53, 22.29, false, 4, 2, 2, 17.30, 2.43, 14.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 13, 'AXM477', 32.26, 0.52, 22.38, false, 15, 13, 2, 14.26, 2.05, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 17, 'AXM477', 29.30, 0.53, 22.41, false, 19, 15, 3, 12.70, 2.73, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 1, 'AXM477', 26.40, 0.53, 22.16, false, 32, 20, 3, 8.92, 2.73, 8.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 5, 'AXM477', 33.55, 0.52, 22.42, false, 4, 14, 1, 19.92, 2.70, 17.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 9, 'AXM477', 31.65, 0.49, 22.42, false, 19, 15, 6, 20.05, 2.18, 8.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 13, 'AXM477', 32.62, 0.47, 22.44, false, 12, 9, 0, 9.32, 3.19, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 17, 'AXM477', 32.27, 0.49, 22.21, false, 17, 17, 1, 11.58, 2.83, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 1, 'AXM477', 24.12, 0.98, 20.62, false, 44, 13, 0, 17.42, 3.97, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 5, 'AXM477', 24.17, 1.03, 20.66, false, 45, 20, 6, 18.93, 4.50, 6.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 9, 'AXM477', 24.04, 0.99, 21.67, false, 35, 13, 4, 11.66, 3.93, 11.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 13, 'AXM477', 23.66, 1.02, 20.56, false, 73, 20, 3, 10.61, 4.00, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 17, 'AXM477', 23.84, 1.00, 21.12, false, 51, 13, 3, 18.40, 4.21, 16.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 1, 'AXM477', 23.98, 1.02, 20.71, false, 54, 15, 6, 14.13, 4.04, 10.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 5, 'AXM477', 23.64, 0.97, 21.62, false, 13, 4, 1, 21.92, 3.92, 16.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 9, 'AXM477', 24.43, 1.00, 21.01, false, 71, 18, 10, 9.41, 4.35, 7.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 13, 'AXM477', 24.34, 1.03, 20.60, false, 29, 8, 3, 17.97, 3.70, 16.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 17, 'AXM477', 24.03, 1.00, 20.02, false, 13, 6, 2, 9.16, 3.91, 7.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 1, 'AXM477', 23.91, 1.01, 21.71, false, 12, 4, 2, 17.90, 4.14, 14.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 5, 'AXM477', 24.42, 1.02, 21.04, false, 34, 17, 2, 15.25, 3.65, 15.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 9, 'AXM477', 24.03, 1.00, 20.97, false, 53, 18, 10, 21.32, 3.86, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 13, 'AXM477', 23.86, 1.02, 20.11, false, 28, 8, 4, 14.02, 3.76, 6.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 17, 'AXM477', 24.21, 0.99, 20.86, false, 31, 11, 2, 10.62, 3.83, 10.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 1, 'AXM477', 25.44, 9.85, 24.67, false, 44, 13, 0, 17.51, 4.15, 7.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 5, 'AXM477', 24.17, 9.75, 25.75, false, 47, 20, 6, 19.08, 4.90, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 9, 'AXM477', 24.09, 9.95, 24.71, false, 36, 13, 4, 11.76, 4.23, 11.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 13, 'AXM477', 24.30, 10.23, 25.36, false, 75, 20, 3, 10.63, 4.11, 7.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 17, 'AXM477', 26.71, 9.66, 24.99, false, 51, 14, 3, 18.57, 4.42, 16.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 1, 'AXM477', 27.05, 10.13, 24.37, false, 55, 16, 7, 14.28, 4.12, 10.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 5, 'AXM477', 24.59, 10.50, 24.01, false, 14, 4, 2, 22.00, 3.96, 16.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 9, 'AXM477', 25.40, 9.63, 24.28, false, 73, 19, 10, 9.55, 4.55, 7.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 13, 'AXM477', 26.94, 10.06, 24.95, false, 30, 9, 4, 18.09, 3.74, 16.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 17, 'AXM477', 24.25, 9.95, 24.31, false, 15, 6, 2, 9.18, 4.30, 7.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 1, 'AXM477', 25.03, 10.17, 24.94, false, 13, 5, 2, 17.93, 4.26, 14.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 5, 'AXM477', 26.40, 9.54, 24.92, false, 35, 18, 2, 15.30, 3.69, 15.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 9, 'AXM477', 25.08, 9.68, 24.14, false, 55, 18, 10, 21.48, 3.98, 7.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 13, 'AXM477', 25.21, 9.82, 25.36, false, 29, 8, 4, 14.05, 4.15, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 17, 'AXM477', 24.84, 10.08, 25.32, false, 33, 12, 3, 10.80, 4.05, 10.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 1, 'AXM477', 27.59, 8.29, 27.42, false, 45, 14, 1, 17.63, 4.53, 7.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 5, 'AXM477', 27.39, 7.68, 26.86, false, 48, 20, 6, 19.18, 5.03, 7.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 9, 'AXM477', 26.84, 8.78, 27.05, false, 36, 13, 5, 11.92, 4.29, 11.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 13, 'AXM477', 27.50, 7.70, 26.73, false, 77, 20, 4, 10.71, 4.41, 7.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 17, 'AXM477', 27.51, 8.79, 26.52, false, 52, 14, 4, 18.64, 4.66, 16.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 1, 'AXM477', 27.84, 8.98, 26.43, false, 55, 16, 7, 14.37, 4.22, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 5, 'AXM477', 25.05, 7.60, 26.85, false, 14, 5, 3, 22.07, 4.14, 16.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 9, 'AXM477', 27.16, 8.38, 26.07, false, 75, 20, 10, 9.70, 4.57, 7.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 13, 'AXM477', 30.87, 7.73, 26.08, false, 31, 10, 5, 18.26, 3.83, 16.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 17, 'AXM477', 25.92, 7.81, 27.10, false, 17, 6, 2, 9.26, 4.48, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 1, 'AXM477', 28.03, 8.21, 26.26, false, 15, 5, 3, 18.02, 4.31, 14.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 5, 'AXM477', 27.44, 8.49, 26.68, false, 37, 19, 3, 15.43, 3.76, 15.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 9, 'AXM477', 26.61, 7.07, 26.49, false, 57, 18, 10, 21.55, 4.26, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 13, 'AXM477', 26.04, 8.88, 26.96, false, 30, 9, 4, 14.19, 4.15, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 17, 'AXM477', 26.34, 8.71, 26.73, false, 35, 13, 4, 10.95, 4.21, 10.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 1, 'AXM477', 28.75, 0.50, 22.18, false, 47, 15, 1, 17.75, 4.92, 7.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 5, 'AXM477', 29.10, 0.49, 22.45, false, 48, 20, 6, 19.21, 5.40, 7.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 9, 'AXM477', 28.36, 0.49, 22.09, false, 38, 14, 5, 11.99, 4.34, 11.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 13, 'AXM477', 31.35, 0.49, 22.41, false, 77, 20, 4, 10.84, 4.61, 7.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 17, 'AXM477', 28.46, 0.49, 22.11, false, 52, 14, 4, 18.69, 4.91, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 1, 'AXM477', 29.21, 0.50, 22.08, false, 56, 17, 8, 14.53, 4.34, 10.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 5, 'AXM477', 26.16, 0.50, 22.14, false, 14, 5, 3, 22.15, 4.24, 16.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 9, 'AXM477', 29.48, 0.49, 22.08, false, 76, 20, 10, 9.76, 4.58, 7.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 13, 'AXM477', 33.78, 0.52, 22.28, false, 32, 10, 5, 18.39, 4.19, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 17, 'AXM477', 29.57, 0.48, 22.19, false, 19, 6, 2, 9.36, 4.78, 7.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 1, 'AXM477', 31.62, 0.48, 22.13, false, 17, 6, 3, 18.12, 4.53, 14.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 5, 'AXM477', 30.35, 0.53, 22.34, false, 37, 20, 4, 15.46, 3.93, 15.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 9, 'AXM477', 29.32, 0.53, 22.09, false, 58, 19, 10, 21.60, 4.54, 7.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 13, 'AXM477', 27.51, 0.51, 22.14, false, 30, 9, 4, 14.36, 4.28, 6.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 17, 'AXM477', 27.70, 0.52, 22.37, false, 35, 14, 5, 10.95, 4.50, 10.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 1, 'AXM477', 24.12, 1.00, 20.17, false, 62, 15, 13, 16.04, 5.53, 12.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 5, 'AXM477', 24.15, 0.99, 21.90, false, 70, 19, 7, 16.18, 5.74, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 9, 'AXM477', 24.46, 0.99, 20.73, false, 31, 9, 6, 21.63, 5.78, 17.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 13, 'AXM477', 23.95, 1.02, 21.02, false, 62, 17, 4, 20.24, 5.86, 14.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 17, 'AXM477', 23.87, 1.01, 20.05, false, 43, 14, 5, 12.72, 6.43, 8.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 1, 'AXM477', 24.15, 1.00, 20.26, false, 70, 17, 11, 14.83, 6.06, 11.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 5, 'AXM477', 24.31, 1.01, 20.62, false, 48, 13, 6, 21.17, 6.15, 14.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 9, 'AXM477', 23.99, 1.02, 21.50, false, 32, 9, 3, 14.15, 5.87, 11.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 13, 'AXM477', 24.32, 1.00, 20.67, false, 48, 10, 2, 16.47, 5.53, 10.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 17, 'AXM477', 23.75, 0.97, 21.84, false, 82, 20, 6, 16.39, 5.55, 6.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 1, 'AXM477', 24.36, 1.01, 20.37, false, 23, 7, 5, 11.82, 5.50, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 5, 'AXM477', 24.27, 0.99, 21.31, false, 31, 9, 7, 20.18, 6.15, 8.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 9, 'AXM477', 24.05, 1.01, 21.47, false, 59, 15, 1, 13.06, 5.68, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 13, 'AXM477', 23.63, 1.01, 20.71, false, 49, 16, 5, 22.26, 6.48, 12.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 17, 'AXM477', 24.34, 0.99, 20.73, false, 55, 14, 1, 17.10, 6.04, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 1, 'AXM477', 27.87, 10.46, 25.44, false, 62, 16, 14, 16.09, 5.89, 12.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 5, 'AXM477', 25.95, 9.73, 25.41, false, 71, 19, 8, 16.21, 5.78, 7.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 9, 'AXM477', 25.32, 9.90, 25.53, false, 31, 9, 7, 21.70, 6.01, 17.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 13, 'AXM477', 27.44, 10.45, 26.11, false, 63, 17, 5, 20.30, 5.95, 14.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 17, 'AXM477', 27.30, 10.33, 24.49, false, 43, 14, 5, 12.81, 6.81, 8.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 1, 'AXM477', 26.99, 10.14, 24.36, false, 71, 18, 11, 14.89, 6.37, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 5, 'AXM477', 26.27, 9.90, 24.34, false, 48, 13, 6, 21.29, 6.53, 14.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 9, 'AXM477', 27.40, 9.87, 25.87, false, 32, 9, 4, 14.35, 5.94, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 13, 'AXM477', 28.05, 9.67, 25.20, false, 50, 10, 3, 16.62, 5.81, 10.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 17, 'AXM477', 27.49, 9.91, 24.42, false, 83, 20, 6, 16.43, 5.77, 6.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 1, 'AXM477', 25.20, 10.20, 25.72, false, 24, 8, 5, 11.89, 5.61, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 5, 'AXM477', 26.26, 10.48, 24.27, false, 33, 10, 8, 20.23, 6.52, 8.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 9, 'AXM477', 27.97, 9.77, 24.25, false, 61, 15, 1, 13.22, 5.95, 7.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 13, 'AXM477', 27.38, 9.99, 24.38, false, 50, 16, 5, 22.43, 6.67, 12.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 17, 'AXM477', 24.59, 10.34, 24.85, false, 57, 14, 2, 17.20, 6.30, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 1, 'AXM477', 31.17, 7.49, 26.43, false, 62, 16, 15, 16.23, 5.90, 12.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 5, 'AXM477', 29.83, 7.16, 26.24, false, 72, 20, 8, 16.27, 6.04, 7.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 9, 'AXM477', 27.09, 8.07, 26.31, false, 33, 10, 7, 21.79, 6.05, 17.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 13, 'AXM477', 28.44, 8.72, 26.09, false, 65, 18, 5, 20.41, 6.14, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 17, 'AXM477', 27.58, 7.33, 26.03, false, 43, 15, 5, 12.92, 7.00, 8.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 1, 'AXM477', 30.62, 7.89, 27.04, false, 73, 19, 11, 14.99, 6.47, 11.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 5, 'AXM477', 27.67, 8.53, 26.16, false, 48, 14, 7, 21.41, 6.64, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 9, 'AXM477', 29.53, 7.86, 26.45, false, 33, 9, 4, 14.41, 6.09, 11.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 13, 'AXM477', 30.68, 7.78, 26.66, false, 51, 10, 3, 16.66, 6.13, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 17, 'AXM477', 28.97, 8.80, 26.93, false, 84, 20, 6, 16.45, 5.90, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 1, 'AXM477', 27.81, 8.19, 26.18, false, 26, 8, 5, 12.07, 5.80, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 5, 'AXM477', 29.41, 8.77, 27.47, false, 33, 11, 8, 20.27, 6.88, 8.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 9, 'AXM477', 31.21, 8.63, 26.43, false, 61, 15, 1, 13.27, 6.29, 7.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 13, 'AXM477', 27.74, 7.61, 26.11, false, 51, 17, 6, 22.59, 6.72, 12.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 17, 'AXM477', 26.50, 8.45, 27.55, false, 58, 14, 2, 17.23, 6.61, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 1, 'AXM477', 33.57, 0.52, 22.04, false, 64, 16, 16, 16.42, 6.07, 12.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 5, 'AXM477', 29.84, 0.53, 22.39, false, 73, 20, 8, 16.39, 6.20, 7.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 9, 'AXM477', 30.93, 0.50, 22.38, false, 35, 10, 7, 21.92, 6.32, 17.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 13, 'AXM477', 31.55, 0.49, 22.45, false, 65, 19, 6, 20.60, 6.49, 14.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 17, 'AXM477', 29.73, 0.50, 22.27, false, 43, 16, 6, 12.97, 7.30, 8.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 1, 'AXM477', 34.38, 0.52, 22.53, false, 75, 19, 11, 15.09, 6.79, 11.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 5, 'AXM477', 28.89, 0.53, 22.42, false, 48, 14, 8, 21.49, 6.76, 14.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 9, 'AXM477', 31.16, 0.51, 22.52, false, 33, 10, 4, 14.45, 6.20, 11.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 13, 'AXM477', 34.05, 0.50, 22.44, false, 51, 11, 3, 16.85, 6.17, 10.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 17, 'AXM477', 29.25, 0.49, 22.46, false, 85, 20, 7, 16.59, 6.21, 6.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 1, 'AXM477', 31.05, 0.51, 22.07, false, 26, 9, 5, 12.08, 6.02, 11.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 5, 'AXM477', 29.68, 0.52, 22.17, false, 33, 11, 9, 20.39, 7.07, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 9, 'AXM477', 35.09, 0.50, 22.16, false, 62, 16, 1, 13.28, 6.42, 7.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 13, 'AXM477', 29.61, 0.49, 22.39, false, 53, 18, 7, 22.77, 6.94, 12.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 17, 'AXM477', 29.17, 0.49, 22.17, false, 60, 15, 2, 17.36, 6.67, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 1, 'AXM477', 23.82, 1.03, 21.47, false, 90, 17, 6, 25.46, 8.28, 18.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 5, 'AXM477', 23.58, 0.97, 21.19, false, 111, 16, 12, 21.77, 7.95, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 9, 'AXM477', 24.37, 0.97, 21.73, false, 117, 20, 4, 19.77, 7.67, 10.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 13, 'AXM477', 24.33, 1.00, 20.39, false, 88, 13, 16, 21.29, 8.09, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 17, 'AXM477', 24.44, 0.97, 21.38, false, 65, 11, 7, 14.28, 8.05, 8.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 1, 'AXM477', 24.23, 1.03, 22.04, false, 120, 18, 11, 24.31, 7.87, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 5, 'AXM477', 23.55, 1.00, 21.21, false, 61, 10, 13, 25.16, 8.43, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 9, 'AXM477', 24.29, 1.03, 21.43, false, 122, 20, 2, 16.89, 7.80, 14.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 13, 'AXM477', 23.58, 1.01, 20.48, false, 71, 13, 14, 23.35, 8.45, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 17, 'AXM477', 23.63, 0.98, 20.26, false, 101, 18, 21, 13.22, 7.69, 8.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 1, 'AXM477', 24.42, 1.00, 21.67, false, 113, 20, 12, 18.05, 8.08, 15.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 5, 'AXM477', 24.37, 1.03, 21.59, false, 109, 20, 22, 14.69, 8.11, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 9, 'AXM477', 24.21, 1.00, 21.20, false, 53, 10, 12, 17.05, 8.36, 15.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 13, 'AXM477', 24.40, 1.02, 21.30, false, 111, 20, 19, 17.41, 7.60, 9.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 17, 'AXM477', 24.46, 0.99, 21.81, false, 92, 18, 14, 19.01, 7.98, 8.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 1, 'AXM477', 26.73, 10.29, 25.88, false, 92, 17, 6, 25.49, 8.33, 18.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 5, 'AXM477', 25.29, 10.22, 26.08, false, 113, 17, 13, 21.88, 8.12, 11.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 9, 'AXM477', 24.44, 10.44, 25.59, false, 118, 20, 4, 19.92, 7.88, 10.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 13, 'AXM477', 27.25, 10.20, 25.14, false, 90, 13, 17, 21.43, 8.20, 9.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 17, 'AXM477', 28.28, 10.41, 25.36, false, 67, 12, 8, 14.47, 8.09, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 1, 'AXM477', 26.06, 10.17, 24.90, false, 120, 18, 11, 24.45, 7.89, 14.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 5, 'AXM477', 26.91, 10.02, 24.59, false, 63, 11, 14, 25.34, 8.80, 17.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 9, 'AXM477', 25.15, 9.58, 25.83, false, 124, 20, 3, 17.03, 7.91, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 13, 'AXM477', 26.39, 10.29, 24.98, false, 71, 14, 14, 23.45, 8.56, 14.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 17, 'AXM477', 24.87, 10.01, 25.54, false, 101, 19, 22, 13.33, 7.79, 8.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 1, 'AXM477', 27.19, 9.51, 24.58, false, 113, 20, 12, 18.09, 8.46, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 5, 'AXM477', 27.09, 10.22, 25.94, false, 109, 20, 22, 14.87, 8.45, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 9, 'AXM477', 24.45, 9.85, 25.28, false, 54, 10, 13, 17.07, 8.65, 15.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 13, 'AXM477', 27.61, 9.86, 24.90, false, 112, 20, 19, 17.55, 7.92, 9.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 17, 'AXM477', 24.56, 9.76, 25.54, false, 92, 18, 14, 19.14, 8.10, 8.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 1, 'AXM477', 28.15, 8.69, 26.18, false, 94, 17, 7, 25.59, 8.43, 18.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 5, 'AXM477', 27.85, 8.84, 27.73, false, 114, 17, 13, 22.02, 8.52, 11.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 9, 'AXM477', 25.53, 7.79, 26.51, false, 120, 20, 5, 20.09, 8.00, 10.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 13, 'AXM477', 29.67, 8.90, 26.26, false, 92, 14, 18, 21.47, 8.35, 9.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 17, 'AXM477', 29.82, 8.23, 26.79, false, 69, 13, 8, 14.66, 8.16, 8.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 1, 'AXM477', 26.93, 7.18, 26.53, false, 121, 19, 12, 24.62, 8.19, 14.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 5, 'AXM477', 30.35, 8.54, 27.40, false, 63, 11, 14, 25.51, 8.95, 17.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 9, 'AXM477', 26.66, 7.78, 27.33, false, 124, 20, 3, 17.19, 8.25, 15.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 13, 'AXM477', 29.40, 8.76, 27.59, false, 72, 15, 15, 23.47, 8.69, 14.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 17, 'AXM477', 26.73, 8.89, 27.19, false, 101, 19, 23, 13.35, 7.92, 8.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 1, 'AXM477', 31.07, 7.06, 26.10, false, 115, 20, 13, 18.25, 8.61, 15.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 5, 'AXM477', 30.74, 7.81, 26.26, false, 110, 20, 23, 15.06, 8.81, 11.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 9, 'AXM477', 25.11, 8.23, 27.16, false, 56, 11, 13, 17.13, 8.79, 16.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 13, 'AXM477', 30.25, 7.79, 26.30, false, 113, 20, 20, 17.56, 7.94, 9.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 17, 'AXM477', 26.31, 7.11, 26.79, false, 92, 19, 15, 19.33, 8.29, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 1, 'AXM477', 29.16, 0.47, 22.32, false, 96, 18, 8, 25.74, 8.50, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 5, 'AXM477', 30.19, 0.52, 22.19, false, 116, 17, 14, 22.09, 8.55, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 9, 'AXM477', 26.34, 0.50, 22.19, false, 120, 20, 6, 20.19, 8.20, 10.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 13, 'AXM477', 32.29, 0.47, 22.06, false, 94, 14, 19, 21.60, 8.61, 9.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 17, 'AXM477', 30.65, 0.52, 22.04, false, 71, 14, 9, 14.68, 8.51, 8.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 1, 'AXM477', 27.06, 0.52, 22.40, false, 123, 19, 12, 24.81, 8.34, 14.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 5, 'AXM477', 31.94, 0.48, 22.38, false, 63, 11, 15, 25.55, 9.20, 17.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 9, 'AXM477', 30.16, 0.52, 22.11, false, 125, 20, 3, 17.29, 8.47, 15.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 13, 'AXM477', 30.23, 0.49, 22.25, false, 74, 15, 15, 23.49, 8.93, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 17, 'AXM477', 30.69, 0.48, 22.06, false, 101, 20, 23, 13.54, 8.22, 8.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 1, 'AXM477', 33.88, 0.53, 22.33, false, 116, 20, 13, 18.25, 8.77, 15.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 5, 'AXM477', 31.91, 0.48, 22.37, false, 112, 20, 24, 15.25, 9.17, 11.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 9, 'AXM477', 26.94, 0.52, 22.19, false, 56, 12, 14, 17.15, 8.95, 16.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 13, 'AXM477', 33.03, 0.50, 22.47, false, 114, 20, 20, 17.69, 8.00, 9.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 17, 'AXM477', 26.84, 0.51, 22.25, false, 93, 19, 16, 19.51, 8.66, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 1, 'AXM477', 23.94, 0.97, 21.25, false, 183, 20, 38, 23.54, 11.51, 19.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 5, 'AXM477', 24.32, 0.98, 20.86, false, 194, 20, 23, 23.63, 12.26, 18.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 9, 'AXM477', 24.10, 1.02, 21.21, false, 113, 12, 19, 27.45, 11.78, 19.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 13, 'AXM477', 23.53, 1.03, 20.15, false, 182, 20, 28, 29.58, 11.85, 29.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 17, 'AXM477', 24.11, 1.01, 20.59, false, 159, 19, 33, 28.16, 11.62, 20.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 1, 'AXM477', 23.89, 0.98, 21.35, false, 191, 20, 29, 19.07, 12.07, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 5, 'AXM477', 23.73, 1.00, 20.61, false, 190, 20, 38, 17.98, 11.91, 12.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 9, 'AXM477', 24.15, 1.01, 20.24, false, 197, 20, 23, 21.64, 12.42, 15.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 13, 'AXM477', 24.46, 0.99, 21.09, false, 135, 14, 6, 21.25, 11.53, 16.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 17, 'AXM477', 24.45, 0.99, 20.85, false, 183, 19, 29, 18.33, 11.93, 13.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 1, 'AXM477', 24.17, 1.00, 21.07, false, 187, 19, 3, 23.25, 12.38, 21.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 5, 'AXM477', 24.44, 1.02, 20.60, false, 177, 20, 22, 22.40, 11.89, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 9, 'AXM477', 23.77, 1.03, 20.03, false, 163, 20, 2, 24.86, 12.42, 14.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 13, 'AXM477', 23.96, 0.98, 21.06, false, 110, 13, 4, 25.14, 11.52, 21.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 17, 'AXM477', 23.60, 1.02, 20.25, false, 168, 20, 3, 24.35, 12.22, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 1, 'AXM477', 24.52, 9.79, 24.00, false, 184, 20, 39, 23.62, 11.73, 19.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 5, 'AXM477', 24.91, 10.16, 24.96, false, 195, 20, 24, 23.65, 12.42, 18.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 9, 'AXM477', 27.42, 9.85, 25.57, false, 115, 12, 20, 27.52, 11.89, 19.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 13, 'AXM477', 26.88, 10.45, 24.62, false, 184, 20, 28, 29.61, 11.96, 29.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 17, 'AXM477', 26.87, 9.85, 25.72, false, 160, 19, 34, 28.34, 11.72, 20.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 1, 'AXM477', 26.24, 10.24, 24.66, false, 191, 20, 29, 19.22, 12.08, 13.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 5, 'AXM477', 24.68, 9.68, 25.21, false, 190, 20, 39, 18.15, 12.29, 12.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 9, 'AXM477', 27.49, 10.14, 26.01, false, 199, 20, 23, 21.70, 12.74, 15.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 13, 'AXM477', 27.75, 9.77, 25.73, false, 137, 14, 6, 21.29, 11.93, 16.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 17, 'AXM477', 27.12, 10.15, 24.33, false, 183, 19, 30, 18.41, 12.16, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 1, 'AXM477', 27.75, 10.17, 24.17, false, 189, 19, 3, 23.36, 12.53, 21.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 5, 'AXM477', 24.63, 9.77, 24.62, false, 178, 20, 23, 22.51, 12.22, 13.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 9, 'AXM477', 26.25, 10.49, 24.36, false, 163, 20, 3, 24.96, 12.61, 14.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 13, 'AXM477', 26.35, 9.93, 25.81, false, 111, 13, 5, 25.23, 11.72, 21.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 17, 'AXM477', 25.36, 10.23, 24.18, false, 169, 20, 3, 24.49, 12.49, 14.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 1, 'AXM477', 26.05, 8.75, 27.61, false, 186, 20, 39, 23.64, 11.91, 19.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 5, 'AXM477', 25.83, 8.90, 27.17, false, 195, 20, 24, 23.76, 12.77, 18.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 9, 'AXM477', 29.86, 8.32, 26.21, false, 115, 12, 20, 27.56, 12.15, 20.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 13, 'AXM477', 27.71, 8.91, 27.41, false, 185, 20, 28, 29.80, 12.33, 29.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 17, 'AXM477', 30.77, 7.49, 26.22, false, 160, 20, 35, 28.49, 12.04, 20.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 1, 'AXM477', 27.02, 7.44, 26.84, false, 193, 20, 29, 19.36, 12.30, 13.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 5, 'AXM477', 26.30, 7.33, 26.55, false, 191, 20, 40, 18.28, 12.59, 12.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 9, 'AXM477', 29.75, 7.34, 26.40, false, 201, 20, 23, 21.84, 12.81, 15.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 13, 'AXM477', 29.06, 7.03, 26.87, false, 138, 14, 7, 21.30, 12.16, 16.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 17, 'AXM477', 28.26, 7.10, 26.74, false, 185, 20, 31, 18.60, 12.20, 13.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 1, 'AXM477', 29.69, 7.35, 26.54, false, 189, 20, 4, 23.46, 12.69, 21.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 5, 'AXM477', 28.55, 7.82, 27.25, false, 179, 20, 24, 22.59, 12.41, 13.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 9, 'AXM477', 27.01, 8.77, 26.86, false, 164, 20, 3, 25.00, 12.85, 14.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 13, 'AXM477', 29.77, 7.83, 26.73, false, 111, 14, 6, 25.27, 11.79, 21.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 17, 'AXM477', 27.22, 7.22, 26.02, false, 169, 20, 4, 24.56, 12.79, 14.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 1, 'AXM477', 26.55, 0.52, 22.10, false, 188, 20, 39, 23.75, 11.94, 19.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 5, 'AXM477', 26.95, 0.50, 22.40, false, 196, 20, 24, 23.93, 12.89, 18.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 9, 'AXM477', 30.45, 0.48, 22.17, false, 116, 12, 21, 27.72, 12.23, 20.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 13, 'AXM477', 29.09, 0.49, 22.15, false, 186, 20, 29, 29.85, 12.57, 29.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 17, 'AXM477', 33.86, 0.47, 22.34, false, 161, 20, 36, 28.53, 12.06, 20.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 1, 'AXM477', 30.58, 0.47, 22.36, false, 195, 20, 29, 19.39, 12.61, 13.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 5, 'AXM477', 26.67, 0.48, 22.18, false, 191, 20, 41, 18.37, 12.62, 13.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 9, 'AXM477', 32.84, 0.47, 22.40, false, 201, 20, 24, 22.02, 12.89, 15.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 13, 'AXM477', 29.93, 0.52, 22.30, false, 140, 15, 8, 21.36, 12.40, 17.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 17, 'AXM477', 31.55, 0.51, 22.26, false, 187, 20, 32, 18.71, 12.38, 13.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 1, 'AXM477', 32.04, 0.48, 22.23, false, 190, 20, 4, 23.66, 13.06, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 5, 'AXM477', 31.72, 0.52, 22.50, false, 179, 20, 24, 22.67, 12.63, 13.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 9, 'AXM477', 28.56, 0.51, 22.40, false, 166, 20, 3, 25.04, 13.10, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 13, 'AXM477', 30.13, 0.53, 22.01, false, 112, 14, 6, 25.37, 12.08, 21.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 17, 'AXM477', 27.97, 0.50, 22.22, false, 170, 20, 4, 24.60, 13.18, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 1, 'AXM477', 24.39, 1.01, 20.05, false, 249, 20, 3, 25.59, 16.03, 16.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 5, 'AXM477', 23.56, 0.99, 21.34, false, 236, 20, 45, 26.93, 16.26, 19.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 9, 'AXM477', 24.30, 1.00, 21.39, false, 154, 12, 21, 24.44, 15.68, 19.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 13, 'AXM477', 24.29, 0.99, 20.88, false, 238, 20, 14, 26.03, 15.55, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 17, 'AXM477', 23.99, 1.01, 20.88, false, 243, 19, 34, 25.51, 15.83, 22.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 1, 'AXM477', 23.56, 1.02, 20.66, false, 253, 20, 27, 28.51, 15.82, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 5, 'AXM477', 24.40, 1.01, 20.99, false, 230, 20, 10, 27.00, 15.61, 18.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 9, 'AXM477', 23.87, 0.98, 21.80, false, 246, 20, 43, 24.96, 15.58, 22.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 13, 'AXM477', 24.02, 1.01, 20.87, false, 155, 14, 29, 30.91, 16.04, 29.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 17, 'AXM477', 23.54, 0.99, 21.54, false, 236, 19, 20, 31.11, 16.25, 29.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 1, 'AXM477', 24.27, 1.02, 21.15, false, 234, 19, 49, 31.18, 16.32, 30.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 5, 'AXM477', 23.69, 0.99, 21.06, false, 230, 20, 15, 30.05, 16.50, 28.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 9, 'AXM477', 23.75, 1.02, 21.02, false, 221, 20, 35, 32.69, 16.29, 21.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 13, 'AXM477', 23.63, 1.01, 20.72, false, 161, 13, 26, 21.83, 15.94, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 17, 'AXM477', 24.19, 0.99, 21.44, false, 229, 20, 23, 26.65, 16.49, 16.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 1, 'AXM477', 25.58, 10.34, 25.47, false, 250, 20, 3, 25.60, 16.18, 17.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 5, 'AXM477', 27.43, 10.16, 24.78, false, 238, 20, 46, 27.05, 16.62, 19.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 9, 'AXM477', 27.63, 9.82, 24.67, false, 155, 12, 21, 24.60, 15.96, 19.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 13, 'AXM477', 26.35, 10.03, 24.38, false, 240, 20, 15, 26.07, 15.85, 18.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 17, 'AXM477', 27.39, 9.72, 24.20, false, 244, 19, 34, 25.66, 16.07, 22.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 1, 'AXM477', 24.03, 9.61, 25.78, false, 255, 20, 27, 28.53, 16.18, 20.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 5, 'AXM477', 25.12, 9.76, 24.79, false, 231, 20, 11, 27.14, 15.67, 18.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 9, 'AXM477', 27.10, 9.87, 25.12, false, 246, 20, 43, 25.00, 15.95, 22.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 13, 'AXM477', 25.59, 9.94, 25.71, false, 157, 14, 29, 31.06, 16.31, 30.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 17, 'AXM477', 25.25, 10.07, 25.03, false, 237, 19, 21, 31.28, 16.36, 30.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 1, 'AXM477', 28.18, 10.41, 24.09, false, 235, 19, 49, 31.32, 16.36, 30.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 5, 'AXM477', 25.52, 9.51, 25.01, false, 231, 20, 15, 30.08, 16.72, 28.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 9, 'AXM477', 25.82, 9.98, 24.28, false, 222, 20, 35, 32.71, 16.62, 21.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 13, 'AXM477', 24.71, 10.25, 25.58, false, 162, 13, 27, 21.94, 16.18, 17.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 17, 'AXM477', 26.46, 10.48, 24.06, false, 231, 20, 24, 26.65, 16.65, 16.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 1, 'AXM477', 29.10, 8.18, 27.16, false, 251, 20, 4, 25.73, 16.57, 17.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 5, 'AXM477', 28.29, 7.74, 26.43, false, 240, 20, 46, 27.09, 16.63, 19.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 9, 'AXM477', 28.74, 7.05, 26.55, false, 155, 12, 22, 24.71, 16.03, 19.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 13, 'AXM477', 29.89, 7.06, 26.34, false, 240, 20, 15, 26.20, 16.03, 18.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 17, 'AXM477', 28.77, 7.84, 27.31, false, 246, 20, 34, 25.78, 16.24, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 1, 'AXM477', 26.73, 8.96, 27.27, false, 255, 20, 27, 28.73, 16.51, 20.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 5, 'AXM477', 26.94, 8.84, 27.71, false, 233, 20, 11, 27.26, 15.75, 19.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 9, 'AXM477', 27.99, 7.61, 27.04, false, 246, 20, 44, 25.03, 16.10, 22.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 13, 'AXM477', 25.63, 7.20, 26.01, false, 158, 14, 29, 31.22, 16.49, 30.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 17, 'AXM477', 26.39, 7.56, 27.23, false, 239, 20, 21, 31.29, 16.70, 30.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 1, 'AXM477', 30.94, 8.88, 27.49, false, 235, 20, 49, 31.40, 16.68, 30.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 5, 'AXM477', 26.48, 8.99, 27.35, false, 231, 20, 15, 30.13, 17.11, 28.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 9, 'AXM477', 28.60, 8.42, 26.11, false, 224, 20, 36, 32.81, 16.84, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 13, 'AXM477', 28.41, 8.73, 27.06, false, 162, 14, 27, 21.95, 16.36, 17.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 17, 'AXM477', 28.07, 8.06, 26.43, false, 231, 20, 24, 26.72, 16.69, 16.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 1, 'AXM477', 30.77, 0.51, 22.17, false, 253, 20, 4, 25.87, 16.92, 17.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 5, 'AXM477', 28.93, 0.52, 22.27, false, 241, 20, 46, 27.23, 16.96, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 9, 'AXM477', 31.25, 0.51, 22.37, false, 157, 12, 22, 24.90, 16.13, 20.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 13, 'AXM477', 33.67, 0.50, 22.07, false, 242, 20, 15, 26.31, 16.39, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 17, 'AXM477', 32.71, 0.47, 22.35, false, 247, 20, 34, 25.97, 16.51, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 1, 'AXM477', 30.49, 0.52, 22.41, false, 256, 20, 27, 28.92, 16.58, 20.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 5, 'AXM477', 27.98, 0.52, 22.12, false, 234, 20, 11, 27.38, 16.07, 19.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 9, 'AXM477', 31.00, 0.50, 22.23, false, 247, 20, 44, 25.19, 16.38, 22.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 13, 'AXM477', 27.04, 0.52, 22.02, false, 159, 15, 30, 31.39, 16.55, 30.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 17, 'AXM477', 28.65, 0.50, 22.33, false, 240, 20, 21, 31.45, 16.86, 30.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 1, 'AXM477', 31.78, 0.48, 22.22, false, 235, 20, 50, 31.54, 16.83, 30.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 5, 'AXM477', 28.89, 0.47, 22.30, false, 232, 20, 16, 30.20, 17.48, 28.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 9, 'AXM477', 31.88, 0.52, 22.31, false, 226, 20, 37, 32.98, 17.09, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 13, 'AXM477', 31.10, 0.52, 22.50, false, 163, 14, 27, 22.10, 16.51, 17.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 17, 'AXM477', 29.96, 0.52, 22.02, false, 233, 20, 24, 26.90, 16.84, 16.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 10, 'AXM478', 26.92, 10.01, 24.24, false, 22, 20, 2, 13.66, 2.09, 5.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 10, 'AXM478', 23.55, 0.99, 20.95, false, 14, 10, 3, 9.26, 1.52, 2.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 10, 'AXM478', 27.55, 0.51, 22.23, false, 15, 13, 4, 9.35, 1.94, 2.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 10, 'AXM478', 24.40, 7.02, 26.35, false, 42, 19, 6, 20.92, 4.27, 10.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 10, 'AXM478', 28.03, 10.23, 24.12, false, 55, 12, 5, 18.69, 6.06, 15.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 10, 'AXM478', 24.03, 1.02, 21.45, false, 120, 20, 5, 20.82, 7.80, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 10, 'AXM478', 26.61, 0.48, 22.44, false, 124, 20, 7, 21.20, 8.64, 14.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 10, 'AXM478', 29.35, 8.28, 27.39, false, 173, 20, 20, 17.53, 12.25, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 10, 'AXM478', 28.31, 10.20, 24.17, false, 245, 20, 47, 29.90, 15.95, 22.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 8, 'AXM480', 27.54, 9.60, 24.62, false, 13, 9, 2, 9.96, 2.51, 7.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 8, 'AXM480', 23.84, 1.00, 21.23, false, 2, 11, 0, 9.69, 1.76, 4.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 8, 'AXM480', 29.24, 0.48, 22.21, false, 6, 13, 1, 9.91, 2.31, 4.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 8, 'AXM480', 27.59, 7.59, 27.22, false, 31, 13, 6, 14.49, 4.19, 12.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 8, 'AXM480', 26.25, 9.92, 25.78, false, 84, 20, 14, 16.51, 5.65, 9.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 8, 'AXM480', 24.42, 1.02, 21.98, false, 103, 20, 4, 14.44, 8.47, 10.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 8, 'AXM480', 31.99, 0.52, 22.46, false, 106, 20, 6, 14.73, 9.14, 10.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 8, 'AXM480', 27.66, 8.78, 27.40, false, 105, 13, 22, 26.35, 12.79, 23.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 8, 'AXM480', 24.40, 9.80, 25.03, false, 140, 12, 14, 26.73, 16.53, 22.82, ''); diff --git a/Chapter15/ABQ_Data_Entry/sql/create_db.sql b/Chapter15/ABQ_Data_Entry/sql/create_db.sql deleted file mode 100644 index 011389a..0000000 --- a/Chapter15/ABQ_Data_Entry/sql/create_db.sql +++ /dev/null @@ -1,82 +0,0 @@ --- Lab techs --- Use employee ID # as primary key --- Since names can change --- Names must be unique since they will be displayed --- In a dropdown -CREATE TABLE lab_techs ( - id SMALLINT PRIMARY KEY, - name VARCHAR(512) UNIQUE NOT NULL - ); - -CREATE TABLE labs ( - id CHAR(1) PRIMARY KEY - ); - -CREATE TABLE plots ( - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - current_seed_sample CHAR(6), - PRIMARY KEY(lab_id, plot), - CONSTRAINT valid_plot CHECK (plot BETWEEN 1 AND 20) - ); - -CREATE TABLE lab_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - lab_tech_id SMALLINT NOT NULL REFERENCES lab_techs(id), - PRIMARY KEY(date, time, lab_id) - ); - -CREATE TABLE plot_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - seed_sample CHAR(6) NOT NULL, - humidity NUMERIC(4, 2) CHECK (humidity BETWEEN 0.5 AND 52.0), - light NUMERIC(5, 2) CHECK (light BETWEEN 0 AND 100), - temperature NUMERIC(4, 2) CHECK (temperature BETWEEN 4 AND 40), - equipment_fault BOOLEAN NOT NULL, - blossoms SMALLINT NOT NULL CHECK (blossoms BETWEEN 0 AND 1000), - plants SMALLINT NOT NULL CHECK (plants BETWEEN 0 AND 20), - fruit SMALLINT NOT NULL CHECK (fruit BETWEEN 0 AND 1000), - max_height NUMERIC(6, 2) NOT NULL CHECK (max_height BETWEEN 0 AND 1000), - min_height NUMERIC(6, 2) NOT NULL CHECK (min_height BETWEEN 0 AND 1000), - median_height NUMERIC(6, 2) - NOT NULL CHECK - (median_height BETWEEN min_height AND max_height), - notes TEXT, - PRIMARY KEY(date, time, lab_id, plot), - FOREIGN KEY(lab_id, date, time) - REFERENCES lab_checks(lab_id, date, time), - FOREIGN KEY(lab_id, plot) REFERENCES plots(lab_id, plot) - ); - -DROP VIEW IF EXISTS data_record_view; -CREATE VIEW data_record_view AS ( - SELECT pc.date AS "Date", - to_char(pc.time, 'FMHH24:MI') AS "Time", - lt.name AS "Technician", - pc.lab_id AS "Lab", - pc.plot AS "Plot", - pc.seed_sample AS "Seed Sample", - pc.equipment_fault AS "Equipment Fault", - pc.humidity AS "Humidity", - pc.light AS "Light", - pc.temperature AS "Temperature", - pc.plants AS "Plants", - pc.blossoms AS "Blossoms", - pc.fruit AS "Fruit", - pc.max_height AS "Max Height", - pc.min_height AS "Min Height", - pc.median_height AS "Med Height", - pc.notes AS "Notes" - FROM plot_checks AS pc - JOIN lab_checks AS lc - ON pc.lab_id = lc.lab_id - AND pc.date = lc.date - AND pc.time = lc.time - JOIN lab_techs AS lt - ON lc.lab_tech_id = lt.id - ); diff --git a/Chapter15/ABQ_Data_Entry/sql/populate_db.sql b/Chapter15/ABQ_Data_Entry/sql/populate_db.sql deleted file mode 100644 index 0ba33aa..0000000 --- a/Chapter15/ABQ_Data_Entry/sql/populate_db.sql +++ /dev/null @@ -1,20 +0,0 @@ -INSERT INTO lab_techs VALUES - (4291, 'J Simms'), - (4319, 'P Taylor'), - (4478, 'Q Murphy'), - (5607, 'L Taniff') - ; - -INSERT INTO labs VALUES - ('A'), ('B'), ('C'), ('D'), ('E'); - -INSERT INTO plots (SELECT labs.id, plotnums.plot -FROM labs, (SELECT generate_series(1, 20) plot) AS plotnums); - -UPDATE plots SET current_seed_sample= - (CASE WHEN plot % 4 = 1 THEN 'AXM477' - WHEN plot % 4 = 2 THEN 'AXM478' - WHEN plot % 4 = 3 THEN 'AXM479' - WHEN plot % 4 = 0 THEN 'AXM480' - ELSE '' END) -; diff --git a/Chapter15/bug_race.py b/Chapter15/bug_race.py deleted file mode 100644 index fcd0647..0000000 --- a/Chapter15/bug_race.py +++ /dev/null @@ -1,129 +0,0 @@ -"""Bug Race - -A demo for the Tkinter Canvas -""" - -import tkinter as tk -from queue import Queue -from random import randint - -class App(tk.Tk): - """Main application class""" - - def __init__(self): - super().__init__() - self.canvas = tk.Canvas(self, background='black') - self.canvas.pack(fill='both', expand=1) - self.geometry('800x600') - self.canvas.wait_visibility() - self.setup() - - def setup(self): - self.canvas.left = 0 - self.canvas.top = 0 - self.canvas.right = self.canvas.winfo_width() - self.canvas.bottom = self.canvas.winfo_height() - self.canvas.center_x = self.canvas.right // 2 - self.canvas.center_y = self.canvas.bottom // 2 - self.finish_line = self.canvas.create_rectangle( - (self.canvas.right - 50, 0), - (self.canvas.right, self.canvas.bottom), - fill='yellow', - stipple='gray50' - ) - self.racers = [ - Racer(self.canvas, 'red'), - Racer(self.canvas, 'green') - ] - self.execute_frame() - - def execute_frame(self): - for racer in self.racers: - racer.next_move() - if self.finish_line in racer.overlapping: - self.declare_winner(racer) - return - self.after(Racer.FRAME_RES, self.execute_frame) - - def declare_winner(self, racer): - - wintext = self.canvas.create_text( - (self.canvas.center_x, self.canvas.center_y), - text=f'{racer.name} wins!\nClick to play again.', - fill='white', - font='TkDefaultFont 32', - activefill='violet' - ) - self.canvas.tag_bind(wintext, '', self.reset) - - def reset(self, *args): - self.canvas.delete('all') - self.setup() - - -class Racer: - - FRAME_RES = 50 - - @staticmethod - def partition(n, k): - """Return a list of k integers that sum to n""" - if n == 0: - return [0] * k - base_step = int(n // k) - parts = [base_step] * k - for i in range(n % k): - parts[i] += 1 - return parts - - def __init__(self, canvas, color): - self.canvas = canvas - self.name = f"{color.title()} player" - size = 50 - # draw & save id - self.id = canvas.create_oval( - (canvas.left, canvas.center_y), - (canvas.left + size, canvas.center_y + size), - fill=color - ) - self.movement_queue = Queue() - self.plot_course() - - def plot_course(self): - start_x = self.canvas.left - start_y = self.canvas.center_y - total_dx, total_dy = (0, 0) - - while start_x + total_dx < self.canvas.right: - dx = randint(0, 100) - dy = randint(-50, 50) - # bounch from top & bottom - target_y = start_y + total_dy + dy - if not (self.canvas.top < target_y < self.canvas.bottom): - dy = -dy - time = randint(500, 2000) - self.queue_move(dx, dy, time) - total_dx += dx - total_dy += dy - - def next_move(self): - if not self.movement_queue.empty(): - nextmove = self.movement_queue.get() - self.canvas.move(self.id, *nextmove) - - def queue_move(self, dx, dy, time): - num_steps = time // self.FRAME_RES - steps = zip( - self.partition(dx, num_steps), - self.partition(dy, num_steps)) - - for step in steps: - self.movement_queue.put(step) - - @property - def overlapping(self): - bbox = self.canvas.bbox(self.id) - overlappers = self.canvas.find_overlapping(*bbox) - return [x for x in overlappers if x!=self.id] - -App().mainloop() diff --git a/Chapter15/canvas_scroll.py b/Chapter15/canvas_scroll.py deleted file mode 100644 index 83a4a2f..0000000 --- a/Chapter15/canvas_scroll.py +++ /dev/null @@ -1,43 +0,0 @@ -import tkinter as tk -from random import randint, choice - -# Create root and canvas -root = tk.Tk() - -width = 1024 -height = 768 - -canvas = tk.Canvas( - root, background='black', - width=width, height=height, -) -canvas.grid(row=0, column=0) - -# Draw stars -colors = ['#FCC', '#CFC', '#CCF', '#FFC', '#FFF', '#CFF'] -for _ in range(1000): - x = randint(0, width * 2) - y = randint(0, height * 2) - z = randint(1, 10) - c = choice(colors) - canvas.create_oval((x - z, y - z), (x + z, y + z), fill=c) - -# configure the scroll region -canvas.configure(scrollregion=(0, 0, width * 2, height * 2)) - -# create scrollbars and connect to canvas -xscroll = tk.Scrollbar( - root, - command=canvas.xview, - orient=tk.HORIZONTAL -) -xscroll.grid(row=1, column=0, sticky='new') - -yscroll = tk.Scrollbar(root, command=canvas.yview) -yscroll.grid(row=0, column=1, sticky='nsw') - -canvas.configure(yscrollcommand=yscroll.set) -canvas.configure(xscrollcommand=xscroll.set) - - -root.mainloop() diff --git a/Chapter15/simple_canvas_demo.py b/Chapter15/simple_canvas_demo.py deleted file mode 100644 index dacb678..0000000 --- a/Chapter15/simple_canvas_demo.py +++ /dev/null @@ -1,66 +0,0 @@ -import tkinter as tk - -root = tk.Tk() -canvas = tk.Canvas( - root, background='black', - width=1024, height=768 -) -canvas.pack() - -# draw a square -canvas.create_rectangle(240, 240, 260, 260, fill='orange') -canvas.create_rectangle( - (300, 240), (320, 260), - fill='#FF8800' -) - -# draw an oval -canvas.create_oval( - (350, 200), (450, 250), fill='blue' -) - -# draw an arc -canvas.create_arc( - (100, 200), (200, 300), - fill='yellow', extent=315, start=25 -) - -# draw a line -canvas.create_line( - (0, 180), (1024, 180), - width=5, fill='cyan' -) - -canvas.create_line( - (0, 320), (500, 320), (500, 768), (640, 768), - (640, 320), (1024, 320), - width=5, fill='cyan' -) - -# draw a polygon -canvas.create_polygon( - (350, 225), (350, 300), (375, 275), (400, 300), - (425, 275), (450, 300), (450, 225), - fill='blue' -) - -# draw text -canvas.create_text( - (500, 100), text='Insert a Quarter', - fill='yellow', font='TkDefaultFont 64' -) - -# draw an image -smiley = tk.PhotoImage(file='smile.gif') -image_item = canvas.create_image((570, 250), image=smiley) -canvas.tag_bind(image_item, '', lambda e: canvas.delete(image_item)) - -# add a widget - -quit = tk.Button( - root, text='Quit', bg='black', fg='cyan', font='TkFixedFont 24', - activeforeground='black', activebackground='cyan', command=root.quit -) -canvas.create_window((100, 700), height=100, width=100, window=quit) - -root.mainloop() diff --git a/Chapter15/smile.gif b/Chapter15/smile.gif deleted file mode 100644 index 34b3a09..0000000 Binary files a/Chapter15/smile.gif and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/.gitignore b/Chapter16/ABQ_Data_Entry/.gitignore deleted file mode 100644 index d646835..0000000 --- a/Chapter16/ABQ_Data_Entry/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pyc -__pycache__/ diff --git a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/PKG-INFO b/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/PKG-INFO deleted file mode 100644 index 68ce53f..0000000 --- a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/PKG-INFO +++ /dev/null @@ -1,56 +0,0 @@ -Metadata-Version: 2.1 -Name: ABQ-Data-Entry -Version: 1.0 -Summary: Data entry application for ABQ Agrilabs -Home-page: http://abq.example.com -Author: Alan D Moore -Author-email: alandmoore@example.com -License: ABQ corporate license -Platform: UNKNOWN -Requires-Python: >=3.6 - -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. - - diff --git a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/SOURCES.txt b/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/SOURCES.txt deleted file mode 100644 index 6ace2be..0000000 --- a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/SOURCES.txt +++ /dev/null @@ -1,39 +0,0 @@ -MANIFEST.in -README.rst -pyproject.toml -requirements.txt -setup.py -ABQ_Data_Entry.egg-info/PKG-INFO -ABQ_Data_Entry.egg-info/SOURCES.txt -ABQ_Data_Entry.egg-info/dependency_links.txt -ABQ_Data_Entry.egg-info/entry_points.txt -ABQ_Data_Entry.egg-info/requires.txt -ABQ_Data_Entry.egg-info/top_level.txt -abq_data_entry/__init__.py -abq_data_entry/__main__.py -abq_data_entry/application.py -abq_data_entry/constants.py -abq_data_entry/mainmenu.py -abq_data_entry/models.py -abq_data_entry/views.py -abq_data_entry/widgets.py -abq_data_entry/images/__init__.py -abq_data_entry/images/abq_logo-16x10.png -abq_data_entry/images/abq_logo-32x20.png -abq_data_entry/images/abq_logo-64x40.png -abq_data_entry/images/browser-2x.png -abq_data_entry/images/file-2x.png -abq_data_entry/images/list-2x.png -abq_data_entry/images/question-mark-2x.xbm -abq_data_entry/images/reload-2x.png -abq_data_entry/images/x-2x.xbm -abq_data_entry/test/__init__.py -abq_data_entry/test/test_application.py -abq_data_entry/test/test_models.py -abq_data_entry/test/test_widgets.py -docs/Application_layout.png -docs/abq_data_entry_spec.rst -docs/lab-tech-paper-form.png -sql/abq_sample_data.sql -sql/create_db.sql -sql/populate_db.sql \ No newline at end of file diff --git a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/dependency_links.txt b/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/entry_points.txt b/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/entry_points.txt deleted file mode 100644 index 213201a..0000000 --- a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -abq = abq_data_entry.__main__:main - diff --git a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/requires.txt b/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/requires.txt deleted file mode 100644 index 5081386..0000000 --- a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/requires.txt +++ /dev/null @@ -1,4 +0,0 @@ -requests -paramiko -matplotlib -psycopg2 diff --git a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/top_level.txt b/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/top_level.txt deleted file mode 100644 index 113ace3..0000000 --- a/Chapter16/ABQ_Data_Entry/ABQ_Data_Entry.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -abq_data_entry diff --git a/Chapter16/ABQ_Data_Entry/MANIFEST.in b/Chapter16/ABQ_Data_Entry/MANIFEST.in deleted file mode 100644 index 21392e4..0000000 --- a/Chapter16/ABQ_Data_Entry/MANIFEST.in +++ /dev/null @@ -1,4 +0,0 @@ -include README.rst -include requirements.txt -include docs/* -include sql/*.sql \ No newline at end of file diff --git a/Chapter16/ABQ_Data_Entry/README.rst b/Chapter16/ABQ_Data_Entry/README.rst deleted file mode 100644 index 5a47dd7..0000000 --- a/Chapter16/ABQ_Data_Entry/README.rst +++ /dev/null @@ -1,43 +0,0 @@ -============================ - ABQ Data Entry Application -============================ - -Description -=========== - -This program provides a data entry form for ABQ Agrilabs laboratory data. - -Features --------- - - * Provides a validated entry form to ensure correct data - * Stores data to ABQ-format CSV files - * Auto-fills form fields whenever possible - -Authors -======= - -Alan D Moore, 2021 - -Requirements -============ - - * Python 3.7 or higher - * Tkinter - -Usage -===== - -To start the application, run:: - - python3 ABQ_Data_Entry/abq_data_entry.py - - -General Notes -============= - -The CSV file will be saved to your current directory in the format -``abq_data_record_CURRENTDATE.csv``, where CURRENTDATE is today's date in ISO format. - -This program only appends to the CSV file. You should have a spreadsheet program -installed in case you need to edit or check the file. diff --git a/Chapter16/ABQ_Data_Entry/abq.icns b/Chapter16/ABQ_Data_Entry/abq.icns deleted file mode 100644 index 3cb806f..0000000 Binary files a/Chapter16/ABQ_Data_Entry/abq.icns and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/abq.ico b/Chapter16/ABQ_Data_Entry/abq.ico deleted file mode 100644 index 17b20f7..0000000 Binary files a/Chapter16/ABQ_Data_Entry/abq.ico and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry.py b/Chapter16/ABQ_Data_Entry/abq_data_entry.py deleted file mode 100644 index 9af0c38..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry.py +++ /dev/null @@ -1,8 +0,0 @@ -from abq_data_entry.application import Application - -def main(): - app = Application() - app.mainloop() - -if __name__ == '__main__': - main() diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/__init__.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/__main__.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/__main__.py deleted file mode 100644 index 9af0c38..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/__main__.py +++ /dev/null @@ -1,8 +0,0 @@ -from abq_data_entry.application import Application - -def main(): - app = Application() - app.mainloop() - -if __name__ == '__main__': - main() diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/application.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/application.py deleted file mode 100644 index a890d41..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/application.py +++ /dev/null @@ -1,518 +0,0 @@ -"""The application/controller class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import filedialog -from tkinter import font -import platform -from queue import Queue - -from . import views as v -from . import models as m -from .mainmenu import get_main_menu_for_os -from . import images - - -class Application(tk.Tk): - """Application root window""" - - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # move here for ch12 because we need some settings data to authenticate - self.settings_model = m.SettingsModel() - self._load_settings() - - # Hide window while GUI is built - self.withdraw() - - # Authenticate - if not self._show_login(): - self.destroy() - return - - # show the window - # chapter14: use after() here to eliminate the small window - # that flashes up breifly - self.after(250, self.deiconify) - - # Create model - # remove for ch12 - # self.model = m.CSVModel() - - self.inserted_rows = [] - self.updated_rows = [] - - # Begin building GUI - self.title("ABQ Data Entry Application") - self.columnconfigure(0, weight=1) - - # Set taskbar icon - self.taskbar_icon = tk.PhotoImage(file=images.ABQ_LOGO_64) - self.call('wm', 'iconphoto', self._w, self.taskbar_icon) - - # Create the menu - #menu = MainMenu(self, self.settings) - menu_class = get_main_menu_for_os(platform.system()) - menu = menu_class(self, self.settings) - - self.config(menu=menu) - event_callbacks = { - '<>': lambda _: self.quit(), - '<>': self._show_recordlist, - '<>': self._new_record, - '<>': self._update_weather_data, - '<>': self._upload_to_corporate_rest, - '<>': self._upload_to_corporate_sftp, - '<>': self.show_growth_chart, - '<>': self.show_yield_chart - } - for sequence, callback in event_callbacks.items(): - self.bind(sequence, callback) - - # new for ch9 - self.logo = tk.PhotoImage(file=images.ABQ_LOGO_32) - ttk.Label( - self, - text="ABQ Data Entry Application", - font=("TkDefaultFont", 16), - image=self.logo, - compound=tk.LEFT - ).grid(row=0) - - # The notebook - self.notebook = ttk.Notebook(self) - self.notebook.enable_traversal() - self.notebook.grid(row=1, padx=10, sticky='NSEW') - - # The data record form - self.recordform_icon = tk.PhotoImage(file=images.FORM_ICON) - self.recordform = v.DataRecordForm(self, self.model, self.settings) - self.notebook.add( - self.recordform, text='Entry Form', - image=self.recordform_icon, compound=tk.LEFT - ) - self.recordform.bind('<>', self._on_save) - - - # The data record list - self.recordlist_icon = tk.PhotoImage(file=images.LIST_ICON) - self.recordlist = v.RecordList(self) - - self.notebook.insert( - 0, self.recordlist, text='Records', - image=self.recordlist_icon, compound=tk.LEFT - ) - self._populate_recordlist() - self.recordlist.bind('<>', self._open_record) - - - self._show_recordlist() - - # status bar - self.status = tk.StringVar() - self.statusbar = ttk.Label(self, textvariable=self.status) - self.statusbar.grid(sticky=(tk.W + tk.E), row=3, padx=10) - - - self.records_saved = 0 - - - def _on_save(self, *_): - """Handles file-save requests""" - - # Check for errors first - - errors = self.recordform.get_errors() - if errors: - self.status.set( - "Cannot save, error in fields: {}" - .format(', '.join(errors.keys())) - ) - message = "Cannot save record" - detail = "The following fields have errors: \n * {}".format( - '\n * '.join(errors.keys()) - ) - messagebox.showerror( - title='Error', - message=message, - detail=detail - ) - return False - - data = self.recordform.get() - rowkey = self.recordform.current_record - self.model.save_record(data, rowkey) - if rowkey is not None: - self.updated_rows.append(rowkey) - else: - rowkey = (data['Date'], data['Time'], data['Lab'], data['Plot']) - self.inserted_rows.append(rowkey) - self.records_saved += 1 - self.status.set( - "{} records saved this session".format(self.records_saved) - ) - self.recordform.reset() - self._populate_recordlist() - -# Remove for ch12 -# def _on_file_select(self, *_): -# """Handle the file->select action""" -# -# filename = filedialog.asksaveasfilename( -# title='Select the target file for saving records', -# defaultextension='.csv', -# filetypes=[('CSV', '*.csv *.CSV')] -# ) -# if filename: -# self.model = m.CSVModel(filename=filename) -# self.inserted_rows.clear() -# self.updated_rows.clear() -# self._populate_recordlist() - - @staticmethod - def _simple_login(username, password): - """A basic authentication backend with a hardcoded user and password""" - return username == 'abq' and password == 'Flowers' - - # new ch12 - def _database_login(self, username, password): - """Try to login to the database and create self.model""" - db_host = self.settings['db_host'].get() - db_name = self.settings['db_name'].get() - try: - self.model = m.SQLModel( - db_host, db_name, username, password) - except m.pg.OperationalError as e: - print(e) - return False - return True - - def _show_login(self): - """Show login dialog and attempt to login""" - error = '' - title = "Login to ABQ Data Entry" - while True: - login = v.LoginDialog(self, title, error) - if not login.result: # User canceled - return False - username, password = login.result - if self._database_login(username, password): - return True - error = 'Login Failed' # loop and redisplay - - def _load_settings(self): - """Load settings into our self.settings dict.""" - - vartypes = { - 'bool': tk.BooleanVar, - 'str': tk.StringVar, - 'int': tk.IntVar, - 'float': tk.DoubleVar - } - - # create our dict of settings variables from the model's settings. - self.settings = dict() - for key, data in self.settings_model.fields.items(): - vartype = vartypes.get(data['type'], tk.StringVar) - self.settings[key] = vartype(value=data['value']) - - # put a trace on the variables so they get stored when changed. - for var in self.settings.values(): - var.trace_add('write', self._save_settings) - - # update font settings after loading them - self._set_font() - self.settings['font size'].trace_add('write', self._set_font) - self.settings['font family'].trace_add('write', self._set_font) - - # process theme - style = ttk.Style() - theme = self.settings.get('theme').get() - if theme in style.theme_names(): - style.theme_use(theme) - - def _save_settings(self, *_): - """Save the current settings to a preferences file""" - - for key, variable in self.settings.items(): - self.settings_model.set(key, variable.get()) - self.settings_model.save() - - def _show_recordlist(self, *_): - """Show the recordform""" - self.notebook.select(self.recordlist) - - def _populate_recordlist(self): - try: - rows = self.model.get_all_records() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem reading file', - detail=str(e) - ) - else: - self.recordlist.populate(rows) - - def _new_record(self, *_): - """Open the record form with a blank record""" - self.recordform.load_record(None, None) - self.notebook.select(self.recordform) - - - def _open_record(self, *_): - """Open the Record selected recordlist id in the recordform""" - rowkey = self.recordlist.selected_id - try: - record = self.model.get_record(rowkey) - except Exception as e: - messagebox.showerror( - title='Error', message='Problem reading file', detail=str(e) - ) - return - self.recordform.load_record(rowkey, record) - self.notebook.select(self.recordform) - - # new chapter 9 - def _set_font(self, *_): - """Set the application's font""" - font_size = self.settings['font size'].get() - font_family = self.settings['font family'].get() - font_names = ('TkDefaultFont', 'TkMenuFont', 'TkTextFont') - for font_name in font_names: - tk_font = font.nametofont(font_name) - tk_font.config(size=font_size, family=font_family) - - # new chapter 13 - def _update_weather_data(self, *_): - """Initiate retrieval and storage of weather data""" - weather_data_model = m.WeatherDataModel( - self.settings['weather_station'].get() - ) - try: - weather_data = weather_data_model.get_weather_data() - except Exception as e: - messagebox.showerror( - title='Error', - message='Problem retrieving weather data', - detail=str(e) - ) - self.status.set('Problem retrieving weather data') - else: - self.model.add_weather_data(weather_data) - time = weather_data['observation_time_rfc822'] - self.status.set(f"Weather data recorded for {time}") - - def _create_csv_extract(self): - csvmodel = m.CSVModel() - records = self.model.get_all_records() - if not records: - raise Exception('No records were found to build a CSV file.') - for record in records: - csvmodel.save_record(record) - return csvmodel.file - - - def _upload_to_corporate_sftp(self, *_): - - # create csv file - try: - csvfile = self._create_csv_extract() - except Exception as e: - messagebox.showwarning( - title='Error', message=str(e) - ) - return - - # authenticate - d = v.LoginDialog(self, 'Login to ABQ Corporate SFTP') - if d.result is None: - return - username, password = d.result - - # create model - host = self.settings['abq_sftp_host'].get() - port = self.settings['abq_sftp_port'].get() - sftp_model = m.SFTPModel(host, port) - try: - sftp_model.authenticate(username, password) - except Exception as e: - messagebox.showerror('Error Authenticating', str(e)) - return - - # check destination file - destination_dir = self.settings['abq_sftp_path'].get() - destination_path = f'{destination_dir}/{csvfile.name}' - - try: - exists = sftp_model.check_file(destination_path) - except Exception as e: - messagebox.showerror( - f'Error checking file {destination_path}', - str(e) - ) - return - if exists: - # ask if we should overwrite - overwrite = messagebox.askyesno( - 'File exists', - f'The file {destination_path} already exists on the server, ' - 'do you want to overwrite it?' - ) - if not overwrite: - # ask if we should download it - download = messagebox.askyesno( - 'Download file', - 'Do you want to download the file to inspect it?' - ) - if download: - # get a destination filename and save - filename = filedialog.asksaveasfilename() - if not filename: - return - try: - sftp_model.get_file(destination_path, filename) - except Exception as e: - messagebox.showerror('Error downloading', str(e)) - return - messagebox.showinfo( - 'Download Complete', 'Download Complete.' - ) - return - # if we haven't returned, the user wants to upload - try: - sftp_model.upload_file(csvfile, destination_path) - except Exception as e: - messagebox.showerror('Error uploading', str(e)) - else: - messagebox.showinfo( - 'Success', - f'{csvfile} successfully uploaded to SFTP server.' - ) - - def _upload_to_corporate_rest(self, *_): - - # create csv file - try: - csvfile = self._create_csv_extract() - except Exception as e: - messagebox.showwarning( - title='Error', message=str(e) - ) - return - - # Authenticate to the rest server - d = v.LoginDialog( - self, 'Login to ABQ Corporate REST API' - ) - if d.result is not None: - username, password = d.result - else: - return - - # create REST model - rest_model = m.CorporateRestModel( - self.settings['abq_rest_url'].get() - ) - try: - rest_model.authenticate(username, password) - except Exception as e: - messagebox.showerror('Error authenticating', str(e)) - return - - # Check if the file exists - try: - exists = rest_model.check_file(csvfile.name) - except Exception as e: - messagebox.showerror('Error checking for file', str(e)) - return - - if exists: - # ask if we should overwrite - overwrite = messagebox.askyesno( - 'File exists', - f'The file {csvfile.name} already exists on the server, ' - 'do you want to overwrite it?' - ) - if not overwrite: - # ask if we should download it - download = messagebox.askyesno( - 'Download file', - 'Do you want to download the file to inspect it?' - ) - if download: - # get a destination filename and save - filename = filedialog.asksaveasfilename() - if not filename: - return - try: - data = rest_model.get_file(csvfile.name) - except Exception as e: - messagebox.showerror('Error downloading', str(e)) - return - with open(filename, 'w', encoding='utf-8') as fh: - fh.write(data) - messagebox.showinfo( - 'Download Complete', 'Download Complete.' - ) - return - # if we haven't returned, the user wants to upload - rest_model.upload_file(csvfile) - self._check_queue(rest_model.queue) - - - def _check_queue(self, queue): - while not queue.empty(): - item = queue.get() - if item.status == 'done': - messagebox.showinfo( - item.status, - message=item.subject, - detail=item.body - ) - self.status.set(item.subject) - return - elif item.status == 'error': - messagebox.showerror( - item.status, - message=item.subject, - detail=item.body - ) - self.status.set(item.subject) - return - else: - self.status.set(f'{item.subject}: {item.body}') - self.after(100, self._check_queue, queue) - - #New for ch15 - def show_growth_chart(self, *_): - data = self.model.get_growth_by_lab() - popup = tk.Toplevel() - chart = v.LineChartView( - popup, data, (800, 400), - 'Day', 'Avg Height (cm)', 'lab_id' - ) - chart.pack(fill='both', expand=1) - - def show_yield_chart(self, *_): - popup = tk.Toplevel() - chart = v.YieldChartView( - popup, - 'Average plot humidity', 'Average Plot temperature', - 'Yield as a product of humidity and temperature' - ) - chart.pack(fill='both', expand=True) - data = self.model.get_yield_by_plot() - seed_colors = { - 'AXM477': 'red', 'AXM478': 'yellow', - 'AXM479': 'green', 'AXM480': 'blue' - } - for seed, color in seed_colors.items(): - seed_data = [ - (x['avg_humidity'], x['avg_temperature'], x['yield']) - for x in data if x['seed_sample'] == seed - ] - chart.draw_scatter(seed_data, color, seed) diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/constants.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/constants.py deleted file mode 100644 index e747dce..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/constants.py +++ /dev/null @@ -1,12 +0,0 @@ -"""Global constants and classes needed by other modules in ABQ Data Entry""" -from enum import Enum, auto - -class FieldTypes(Enum): - string = auto() - string_list = auto() - short_string_list = auto() - iso_date_string = auto() - long_string = auto() - decimal = auto() - integer = auto() - boolean = auto() diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/__init__.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/__init__.py deleted file mode 100644 index e722cb2..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -from pathlib import Path -import sys - -if getattr(sys, 'frozen', False): - IMAGE_DIRECTORY = Path(sys.executable).parent / 'images' -else: - IMAGE_DIRECTORY = Path(__file__).parent - -ABQ_LOGO_16 = IMAGE_DIRECTORY / 'abq_logo-16x10.png' -ABQ_LOGO_32 = IMAGE_DIRECTORY / 'abq_logo-32x20.png' -ABQ_LOGO_64 = IMAGE_DIRECTORY / 'abq_logo-64x40.png' - -# PNG icons - -SAVE_ICON = IMAGE_DIRECTORY / 'file-2x.png' -RESET_ICON = IMAGE_DIRECTORY / 'reload-2x.png' -LIST_ICON = IMAGE_DIRECTORY / 'list-2x.png' -FORM_ICON = IMAGE_DIRECTORY / 'browser-2x.png' - - -# BMP icons -QUIT_BMP = IMAGE_DIRECTORY / 'x-2x.xbm' -ABOUT_BMP = IMAGE_DIRECTORY / 'question-mark-2x.xbm' diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png deleted file mode 100644 index 255f273..0000000 Binary files a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/abq_logo-16x10.png and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png deleted file mode 100644 index 650add1..0000000 Binary files a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/abq_logo-32x20.png and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png deleted file mode 100644 index be9458f..0000000 Binary files a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/abq_logo-64x40.png and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png deleted file mode 100644 index 2a6efb0..0000000 Binary files a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/browser-2x.png and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/file-2x.png b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/file-2x.png deleted file mode 100644 index 4196c44..0000000 Binary files a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/file-2x.png and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/list-2x.png b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/list-2x.png deleted file mode 100644 index 1fc4450..0000000 Binary files a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/list-2x.png and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm deleted file mode 100644 index 8981c9b..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/question-mark-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define question_mark_2x_width 16 -#define question_mark_2x_height 16 -static unsigned char question_mark_2x_bits[] = { - 0xc0, 0x0f, 0xe0, 0x1f, 0x70, 0x38, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, - 0x00, 0x18, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03 }; diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png deleted file mode 100644 index 2a79f16..0000000 Binary files a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/reload-2x.png and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm b/Chapter16/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm deleted file mode 100644 index 940af96..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/images/x-2x.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define x_2x_width 16 -#define x_2x_height 16 -static unsigned char x_2x_bits[] = { - 0x04, 0x10, 0x0e, 0x38, 0x1f, 0x7c, 0x3e, 0x7e, 0x7c, 0x3f, 0xf8, 0x1f, - 0xf0, 0x0f, 0xe0, 0x07, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0x7e, 0x3e, - 0x3f, 0x7c, 0x1e, 0x78, 0x0c, 0x30, 0x00, 0x00 }; diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/mainmenu.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/mainmenu.py deleted file mode 100644 index f0a0ad8..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/mainmenu.py +++ /dev/null @@ -1,420 +0,0 @@ -"""The Main Menu class for ABQ Data Entry""" - -import tkinter as tk -from tkinter import ttk -from tkinter import messagebox -from tkinter import font - -from . import images - -class GenericMainMenu(tk.Menu): - """The Application's main menu""" - - accelerators = { - 'file_open': 'Ctrl+O', - 'quit': 'Ctrl+Q', - 'record_list': 'Ctrl+L', - 'new_record': 'Ctrl+R', - } - - keybinds = { - '': '<>', - '': '<>', - '': '<>', - '': '<>' - } - - styles = {} - - def _event(self, sequence): - """Return a callback function that generates the sequence""" - def callback(*_): - root = self.master.winfo_toplevel() - root.event_generate(sequence) - - return callback - - def _create_icons(self): - - # must be done in a method because PhotoImage can't be created - # until there is a Tk instance. - # There isn't one when the class is defined, but there is when - # the instance is created. - self.icons = { - # 'file_open': tk.PhotoImage(file=images.SAVE_ICON), - 'record_list': tk.PhotoImage(file=images.LIST_ICON), - 'new_record': tk.PhotoImage(file=images.FORM_ICON), - 'quit': tk.BitmapImage(file=images.QUIT_BMP, foreground='red'), - 'about': tk.BitmapImage( - file=images.ABOUT_BMP, foreground='#CC0', background='#A09' - ), - } - - def _add_file_open(self, menu): - - menu.add_command( - label='Select file…', command=self._event('<>'), - image=self.icons.get('file'), compound=tk.LEFT - ) - - def _add_quit(self, menu): - menu.add_command( - label='Quit', command=self._event('<>'), - image=self.icons.get('quit'), compound=tk.LEFT - ) - - def _add_weather_download(self, menu): - menu.add_command( - label="Update Weather Data", - command=self._event('<>'), - ) - - def _add_rest_upload(self, menu): - menu.add_command( - label="Upload CSV to corporate REST", - command=self._event('<>'), - ) - - def _add_sftp_upload(self, menu): - menu.add_command( - label="Upload CSV to corporate SFTP", - command=self._event('<>'), - ) - - def _add_autofill_date(self, menu): - menu.add_checkbutton( - label='Autofill Date', variable=self.settings['autofill date'] - ) - - def _add_autofill_sheet(self, menu): - menu.add_checkbutton( - label='Autofill Sheet data', - variable=self.settings['autofill sheet data'] - ) - - def _add_font_size_menu(self, menu): - font_size_menu = tk.Menu(self, tearoff=False, **self.styles) - for size in range(6, 17, 1): - font_size_menu.add_radiobutton( - label=size, value=size, - variable=self.settings['font size'] - ) - menu.add_cascade(label='Font size', menu=font_size_menu) - - def _add_font_family_menu(self, menu): - font_family_menu = tk.Menu(self, tearoff=False, **self.styles) - for family in font.families(): - font_family_menu.add_radiobutton( - label=family, value=family, - variable=self.settings['font family'] - ) - menu.add_cascade(label='Font family', menu=font_family_menu) - - def _add_themes_menu(self, menu): - style = ttk.Style() - themes_menu = tk.Menu(self, tearoff=False, **self.styles) - for theme in style.theme_names(): - themes_menu.add_radiobutton( - label=theme, value=theme, - variable=self.settings['theme'] - ) - menu.add_cascade(label='Theme', menu=themes_menu) - self.settings['theme'].trace_add('write', self._on_theme_change) - - def _add_go_record_list(self, menu): - menu.add_command( - label="Record List", command=self._event('<>'), - image=self.icons.get('record_list'), compound=tk.LEFT - ) - - def _add_go_new_record(self, menu): - menu.add_command( - label="New Record", command=self._event('<>'), - image=self.icons.get('new_record'), compound=tk.LEFT - ) - - def _add_about(self, menu): - menu.add_command( - label='About…', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _add_growth_chart(self, menu): - menu.add_command( - label='Show Growth Chart', command=self._event('<>') - ) - - def _add_yield_chart(self, menu): - menu.add_command( - label='Show Yield Chart', command=self._event('<>') - ) - - def _build_menu(self): - # The file menu - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) - #self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - self._add_growth_chart(self._menus['Tools']) - self._add_yield_chart(self._menus['Tools']) - - # The options menu - self._menus['Options'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Options']) - self._add_autofill_sheet(self._menus['Options']) - self._add_font_size_menu(self._menus['Options']) - self._add_font_family_menu(self._menus['Options']) - self._add_themes_menu(self._menus['Options']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self.add_cascade(label='Help', menu=self._menus['Help']) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - self.configure(**self.styles) - - def __init__(self, parent, settings, **kwargs): - super().__init__(parent, **kwargs) - self.settings = settings - self._create_icons() - self._menus = dict() - self._build_menu() - self._bind_accelerators() - self.configure(**self.styles) - - def show_about(self): - """Show the about dialog""" - - about_message = 'ABQ Data Entry' - about_detail = ( - 'by Alan D Moore\n' - 'For assistance please contact the author.' - ) - - messagebox.showinfo( - title='About', message=about_message, detail=about_detail - ) - @staticmethod - def _on_theme_change(*_): - """Popup a message about theme changes""" - message = "Change requires restart" - detail = ( - "Theme changes do not take effect" - " until application restart" - ) - messagebox.showwarning( - title='Warning', - message=message, - detail=detail - ) - - def _bind_accelerators(self): - - for key, sequence in self.keybinds.items(): - self.bind_all(key, self._event(sequence)) - -class WindowsMainMenu(GenericMainMenu): - """ - Changes: - - Windows uses file->exit instead of file->quit, - and no accelerator is used. - - Windows can handle commands on the menubar, so - put 'Record List' / 'New Record' on the bar - - Windows can't handle icons on the menu bar, though - - Put 'options' under 'Tools' with separator - """ - - def _create_icons(self): - super()._create_icons() - del(self.icons['new_record']) - del(self.icons['record_list']) - - def __init__(self, *args, **kwargs): - del(self.keybinds['']) - super().__init__(*args, **kwargs) - - def _add_quit(self, menu): - menu.add_command( - label='Exit', - command=self._event('<>'), - image=self.icons.get('quit'), - compound=tk.LEFT - ) - - def _build_menu(self): - # File Menu - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Tools']) - self._add_autofill_sheet(self._menus['Tools']) - self._add_font_size_menu(self._menus['Tools']) - self._add_font_family_menu(self._menus['Tools']) - self._add_themes_menu(self._menus['Tools']) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - self._add_growth_chart(self._menus['Tools']) - self._add_yield_chart(self._menus['Tools']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False) - self._add_about(self._menus['Help']) - - # Build main menu - self.add_cascade(label='File', menu=self._menus['File']) - self.add_cascade(label='Tools', menu=self._menus['Tools']) - self._add_go_record_list(self) - self._add_go_new_record(self) - self.add_cascade(label='Help', menu=self._menus['Help']) - - -class LinuxMainMenu(GenericMainMenu): - """Differences for Linux: - - - Edit menu for autofill options - - View menu for font & theme options - - Use color theme for menu - """ - styles = { - 'background': '#333', - 'foreground': 'white', - 'activebackground': '#777', - 'activeforeground': 'white', - 'relief': tk.GROOVE - } - - - def _build_menu(self): - self._menus['File'] = tk.Menu(self, tearoff=False, **self.styles) -# self._add_file_open(self._menus['File']) - self._menus['File'].add_separator() - self._add_quit(self._menus['File']) - - # The edit menu - self._menus['Edit'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - self._add_growth_chart(self._menus['Tools']) - self._add_yield_chart(self._menus['Tools']) - - - # The View menu - self._menus['View'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # switch from recordlist to recordform - self._menus['Go'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_go_record_list(self._menus['Go']) - self._add_go_new_record(self._menus['Go']) - - # The help menu - self._menus['Help'] = tk.Menu(self, tearoff=False, **self.styles) - self._add_about(self._menus['Help']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -class MacOsMainMenu(GenericMainMenu): - """ - Differences for MacOS: - - - Create App Menu - - Move about to app menu, remove 'help' - - Remove redundant quit command - - Change accelerators to Command-[] - - Add View menu for font & theme options - - Add Edit menu for autofill options - - Add Window menu for navigation commands - """ - keybinds = { - '': '<>', - '': '<>', - '': '<>' - } - accelerators = { - 'file_open': 'Cmd-O', - 'record_list': 'Cmd-L', - 'new_record': 'Cmd-R', - } - - def _add_about(self, menu): - menu.add_command( - label='About ABQ Data Entry', command=self.show_about, - image=self.icons.get('about'), compound=tk.LEFT - ) - - def _build_menu(self): - self._menus['ABQ Data Entry'] = tk.Menu( - self, tearoff=False, - name='apple' - ) - self._add_about(self._menus['ABQ Data Entry']) - self._menus['ABQ Data Entry'].add_separator() - - self._menus['File'] = tk.Menu(self, tearoff=False) -# self._add_file_open(self._menus['File']) - - self._menus['Edit'] = tk.Menu(self, tearoff=False) - self._add_autofill_date(self._menus['Edit']) - self._add_autofill_sheet(self._menus['Edit']) - - #Tools menu - self._menus['Tools'] = tk.Menu(self, tearoff=False) - self._add_weather_download(self._menus['Tools']) - self._add_rest_upload(self._menus['Tools']) - self._add_sftp_upload(self._menus['Tools']) - self._add_growth_chart(self._menus['Tools']) - self._add_yield_chart(self._menus['Tools']) - - # View menu - self._menus['View'] = tk.Menu(self, tearoff=False) - self._add_font_size_menu(self._menus['View']) - self._add_font_family_menu(self._menus['View']) - self._add_themes_menu(self._menus['View']) - - # Window Menu - self._menus['Window'] = tk.Menu(self, name='window', tearoff=False) - self._add_go_record_list(self._menus['Window']) - self._add_go_new_record(self._menus['Window']) - - for label, menu in self._menus.items(): - self.add_cascade(label=label, menu=menu) - - -def get_main_menu_for_os(os_name): - """Return the menu class appropriate to the given OS""" - menus = { - 'Linux': LinuxMainMenu, - 'Darwin': MacOsMainMenu, - 'freebsd7': LinuxMainMenu, - 'Windows': WindowsMainMenu - } - - return menus.get(os_name, GenericMainMenu) diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/models.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/models.py deleted file mode 100644 index c52daa2..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/models.py +++ /dev/null @@ -1,578 +0,0 @@ -import csv -from pathlib import Path -import os -import json -import platform -from datetime import datetime -from urllib.request import urlopen -from xml.etree import ElementTree -import requests -import paramiko -from threading import Thread, Lock -from queue import Queue -from collections import namedtuple - -import psycopg2 as pg -from psycopg2.extras import DictCursor - -from .constants import FieldTypes as FT - -Message = namedtuple('Message', ['status', 'subject', 'body']) - -class SQLModel: - """Data Model for SQL data storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string_list, - 'values': []}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': []}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': []}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, - 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - lc_update_query = ( - 'UPDATE lab_checks SET lab_tech_id = ' - '(SELECT id FROM lab_techs WHERE name = %(Technician)s) ' - 'WHERE date=%(Date)s AND time=%(Time)s AND lab_id=%(Lab)s' - ) - - lc_insert_query = ( - 'INSERT INTO lab_checks VALUES (%(Date)s, %(Time)s, %(Lab)s, ' - '(SELECT id FROM lab_techs WHERE name LIKE %(Technician)s))' - ) - - pc_update_query = ( - 'UPDATE plot_checks SET date=%(Date)s, time=%(Time)s, ' - 'lab_id=%(Lab)s, plot=%(Plot)s, seed_sample = %(Seed Sample)s, ' - 'humidity = %(Humidity)s, light = %(Light)s, ' - 'temperature = %(Temperature)s, ' - 'equipment_fault = %(Equipment Fault)s, ' - 'blossoms = %(Blossoms)s, plants = %(Plants)s, ' - 'fruit = %(Fruit)s, max_height = %(Max Height)s, ' - 'min_height = %(Min Height)s, median_height = %(Med Height)s, ' - 'notes = %(Notes)s WHERE date=%(key_date)s AND time=%(key_time)s ' - 'AND lab_id=%(key_lab)s AND plot=%(key_plot)s') - - pc_insert_query = ( - 'INSERT INTO plot_checks VALUES (%(Date)s, %(Time)s, %(Lab)s,' - ' %(Plot)s, %(Seed Sample)s, %(Humidity)s, %(Light)s,' - ' %(Temperature)s, %(Equipment Fault)s, %(Blossoms)s, %(Plants)s,' - ' %(Fruit)s, %(Max Height)s, %(Min Height)s,' - ' %(Med Height)s, %(Notes)s)') - - def __init__(self, host, database, user, password): - self.connection = pg.connect(host=host, database=database, - user=user, password=password, cursor_factory=DictCursor) - - techs = self.query("SELECT name FROM lab_techs ORDER BY name") - labs = self.query("SELECT id FROM labs ORDER BY id") - plots = self.query("SELECT DISTINCT plot FROM plots ORDER BY plot") - self.fields['Technician']['values'] = [x['name'] for x in techs] - self.fields['Lab']['values'] = [x['id'] for x in labs] - self.fields['Plot']['values'] = [str(x['plot']) for x in plots] - - def query(self, query, parameters=None): - with self.connection: - with self.connection.cursor() as cursor: - cursor.execute(query, parameters) - # cursor.description is None when - # no rows are returned - if cursor.description is not None: - return cursor.fetchall() - - def get_all_records(self, all_dates=False): - """Return all records. - - By default, only return today's records, unless - all_dates is True. - """ - query = ('SELECT * FROM data_record_view ' - 'WHERE %(all_dates)s OR "Date" = CURRENT_DATE ' - 'ORDER BY "Date" DESC, "Time", "Lab", "Plot"') - return self.query(query, {'all_dates': all_dates}) - - def get_record(self, rowkey): - """Return a single record - - rowkey must be a tuple of date, time, lab, and plot - """ - date, time, lab, plot = rowkey - query = ( - 'SELECT * FROM data_record_view ' - 'WHERE "Date" = %(date)s AND "Time" = %(time)s ' - 'AND "Lab" = %(lab)s AND "Plot" = %(plot)s') - result = self.query( - query, - {"date": date, "time": time, "lab": lab, "plot": plot} - ) - return result[0] if result else dict() - - def save_record(self, record, rowkey): - """Save a record to the database - - rowkey must be a tuple of date, time, lab, and plot. - Or None if this is a new record. - """ - if rowkey: - key_date, key_time, key_lab, key_plot = rowkey - record.update({ - "key_date": key_date, - "key_time": key_time, - "key_lab": key_lab, - "key_plot": key_plot - }) - - # Lab check is based on the entered date/time/lab - if self.get_lab_check( - record['Date'], record['Time'], record['Lab'] - ): - lc_query = self.lc_update_query - else: - lc_query = self.lc_insert_query - # Plot check is based on the key values - if rowkey: - pc_query = self.pc_update_query - else: - pc_query = self.pc_insert_query - - self.query(lc_query, record) - self.query(pc_query, record) - - def get_lab_check(self, date, time, lab): - """Retrieve the lab check record for the given date, time, and lab""" - query = ('SELECT date, time, lab_id, lab_tech_id, ' - 'lt.name as lab_tech FROM lab_checks JOIN lab_techs lt ' - 'ON lab_checks.lab_tech_id = lt.id WHERE ' - 'lab_id = %(lab)s AND date = %(date)s AND time = %(time)s') - results = self.query( - query, {'date': date, 'time': time, 'lab': lab}) - return results[0] if results else dict() - - def get_current_seed_sample(self, lab, plot): - """Get the seed sample currently planted in the given lab and plot""" - result = self.query('SELECT current_seed_sample FROM plots ' - 'WHERE lab_id=%(lab)s AND plot=%(plot)s', - {'lab': lab, 'plot': plot}) - return result[0]['current_seed_sample'] if result else '' - - def add_weather_data(self, data): - query = ( - 'INSERT INTO local_weather VALUES ' - '(%(observation_time_rfc822)s, %(temp_c)s, ' - '%(relative_humidity)s, %(pressure_mb)s, ' - '%(weather)s)' - ) - try: - self.query(query, data) - except pg.IntegrityError: - # already have weather for this datetime - pass - - # new ch15 - def get_growth_by_lab(self): - query = ( - 'SELECT date - (SELECT min(date) FROM plot_checks) AS "Day", ' - 'lab_id, avg(median_height) AS "Avg Height (cm)" FROM plot_checks ' - 'GROUP BY date, lab_id ORDER BY "Day", lab_id;' - ) - return self.query(query) - - def get_yield_by_plot(self): - query = ( - 'SELECT lab_id, plot, seed_sample, MAX(fruit) AS yield, ' - 'AVG(humidity) AS avg_humidity, ' - 'AVG(temperature) AS avg_temperature ' - 'FROM plot_checks WHERE NOT equipment_fault ' - 'GROUP BY lab_id, plot, seed_sample' - ) - return self.query(query) - - -class CSVModel: - """CSV file storage""" - - fields = { - "Date": {'req': True, 'type': FT.iso_date_string}, - "Time": {'req': True, 'type': FT.string_list, - 'values': ['8:00', '12:00', '16:00', '20:00']}, - "Technician": {'req': True, 'type': FT.string}, - "Lab": {'req': True, 'type': FT.short_string_list, - 'values': ['A', 'B', 'C']}, - "Plot": {'req': True, 'type': FT.string_list, - 'values': [str(x) for x in range(1, 21)]}, - "Seed Sample": {'req': True, 'type': FT.string}, - "Humidity": {'req': True, 'type': FT.decimal, - 'min': 0.5, 'max': 52.0, 'inc': .01}, - "Light": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 100.0, 'inc': .01}, - "Temperature": {'req': True, 'type': FT.decimal, - 'min': 4, 'max': 40, 'inc': .01}, - "Equipment Fault": {'req': False, 'type': FT.boolean}, - "Plants": {'req': True, 'type': FT.integer, 'min': 0, 'max': 20}, - "Blossoms": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Fruit": {'req': True, 'type': FT.integer, 'min': 0, 'max': 1000}, - "Min Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Max Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Med Height": {'req': True, 'type': FT.decimal, - 'min': 0, 'max': 1000, 'inc': .01}, - "Notes": {'req': False, 'type': FT.long_string} - } - - - def __init__(self, filename=None): - - if not filename: - datestring = datetime.today().strftime("%Y-%m-%d") - filename = "abq_data_record_{}.csv".format(datestring) - self.file = Path(filename) - - # Check for append permissions: - file_exists = os.access(self.file, os.F_OK) - parent_writeable = os.access(self.file.parent, os.W_OK) - file_writeable = os.access(self.file, os.W_OK) - if ( - (not file_exists and not parent_writeable) or - (file_exists and not file_writeable) - ): - msg = f'Permission denied accessing file: {filename}' - raise PermissionError(msg) - - - def save_record(self, data, rownum=None): - """Save a dict of data to the CSV file""" - - if rownum is None: - # This is a new record - newfile = not self.file.exists() - - with open(self.file, 'a', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - if newfile: - csvwriter.writeheader() - csvwriter.writerow(data) - else: - # This is an update - records = self.get_all_records() - records[rownum] = data - with open(self.file, 'w', encoding='utf-8', newline='') as fh: - csvwriter = csv.DictWriter(fh, fieldnames=self.fields.keys()) - csvwriter.writeheader() - csvwriter.writerows(records) - - def get_all_records(self): - """Read in all records from the CSV and return a list""" - if not self.file.exists(): - return [] - - with open(self.file, 'r', encoding='utf-8') as fh: - # Casting to list is necessary for unit tests to work - csvreader = csv.DictReader(fh) - missing_fields = set(self.fields.keys()) - set(csvreader.fieldnames) - if len(missing_fields) > 0: - fields_string = ', '.join(missing_fields) - raise Exception( - f"File is missing fields: {fields_string}" - ) - records = list(csvreader) - - # Correct issue with boolean fields - trues = ('true', 'yes', '1') - bool_fields = [ - key for key, meta - in self.fields.items() - if meta['type'] == FT.boolean - ] - for record in records: - for key in bool_fields: - record[key] = record[key].lower() in trues - return records - - def get_record(self, rownum): - """Get a single record by row number - - Callling code should catch IndexError - in case of a bad rownum. - """ - - return self.get_all_records()[rownum] - - -class SettingsModel: - """A model for saving settings""" - - fields = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'}, - 'db_host': {'type': 'str', 'value': 'localhost'}, - 'db_name': {'type': 'str', 'value': 'abq'}, - 'weather_station': {'type': 'str', 'value': 'KBMG'}, - 'abq_rest_url': { - 'type': 'str', - 'value': 'http://localhost:8000/' - }, - 'abq_sftp_host': {'type': 'str', 'value': 'localhost'}, - 'abq_sftp_port': {'type': 'int', 'value': 22}, - 'abq_sftp_path': {'type': 'str', 'value': 'ABQ/BLTN_IN'} - } - - config_dirs = { - "Linux": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - "freebsd7": Path(os.environ.get('$XDG_CONFIG_HOME', Path.home() / '.config')), - 'Darwin': Path.home() / 'Library' / 'Application Support', - 'Windows': Path.home() / 'AppData' / 'Local' - } - - def __init__(self): - # determine the file path - filename = 'abq_settings.json' - filedir = self.config_dirs.get(platform.system(), Path.home()) - self.filepath = filedir / filename - - # load in saved values - self.load() - - def set(self, key, value): - """Set a variable value""" - if ( - key in self.fields and - type(value).__name__ == self.fields[key]['type'] - ): - self.fields[key]['value'] = value - else: - raise ValueError("Bad key or wrong variable type") - - def save(self): - """Save the current settings to the file""" - json_string = json.dumps(self.fields) - with open(self.filepath, 'w', encoding='utf-8') as fh: - fh.write(json_string) - - def load(self): - """Load the settings from the file""" - - # if the file doesn't exist, return - if not self.filepath.exists(): - return - - # open the file and read in the raw values - with open(self.filepath, 'r') as fh: - raw_values = json.loads(fh.read()) - - # don't implicitly trust the raw values, but only get known keys - for key in self.fields: - if key in raw_values and 'value' in raw_values[key]: - raw_value = raw_values[key]['value'] - self.fields[key]['value'] = raw_value - -class WeatherDataModel: - - base_url = 'http://w1.weather.gov/xml/current_obs/%7B%7D.xml' - - def __init__(self, station): - self.url = self.base_url.format(station) - - - def get_weather_data(self): - response = urlopen(self.url) - - xmlroot = ElementTree.fromstring(response.read()) - weatherdata = { - 'observation_time_rfc822': None, - 'temp_c': None, - 'relative_humidity': None, - 'pressure_mb': None, - 'weather': None - } - - for tag in weatherdata: - element = xmlroot.find(tag) - if element is not None: - weatherdata[tag] = element.text - - return weatherdata - - - -class ThreadedUploader(Thread): - - upload_lock = Lock() - - def __init__(self, session_cookie, files_url, filepath, queue): - super().__init__() - self.files_url = files_url - self.filepath = filepath - self.session = requests.Session() - self.session.cookies['session'] = session_cookie - self.queue = queue - - - def run(self, *args, **kwargs): - self.queue.put( - Message( - 'info', 'Upload Started', - f'Begin upload of {self.filepath}' - ) - ) - - with self.upload_lock: - with open(self.filepath, 'rb') as fh: - files = {'file': fh} - response = self.session.put( - self.files_url, files=files - ) - try: - response.raise_for_status() - except Exception as e: - self.queue.put(Message('error', 'Upload Error', str(e))) - else: - self.queue.put( - Message( - 'done', - 'Upload Succeeded', - f'Upload of {self.filepath} to REST succeeded' - ) - ) - - -class CorporateRestModel: - - def __init__(self, base_url): - - self.auth_url = f'{base_url}/auth' - self.files_url = f'{base_url}/files' - self.session = requests.session() - self.queue = Queue() - - @staticmethod - def _raise_for_status(response): - try: - response.raise_for_status() - except requests.HTTPError: - raise Exception(response.json().get('message')) - - def authenticate(self, username, password): - """Authenticate to the server""" - response = self.session.post( - self.auth_url, - data={'username': username, 'password': password} - ) - self._raise_for_status(response) - - def check_file(self, filename): - """See if a file exists on the server""" - url = f"{self.files_url}/{filename}" - response = self.session.head(url) - if response.status_code == 200: - return True - elif response.status_code == 404: - return False - self._raise_for_status(response) - - def get_file(self, filename): - """Download a file from the server""" - url = f"{self.files_url}/{filename}" - response = self.session.get(url) - self._raise_for_status(response) - return response.text - - def upload_file(self, filepath): - """PUT a file on the server""" - cookie = self.session.cookies.get('session') - uploader = ThreadedUploader( - cookie, self.files_url, filepath, self.queue - ) - uploader.start() - -class SFTPModel: - - def __init__(self, host, port=22): - self.host = host - self.port = port - - # setup SSHClient - self._client = paramiko.SSHClient() - self._client.set_missing_host_key_policy( - paramiko.AutoAddPolicy() - ) - self._client.load_system_host_keys() - - - def authenticate(self, username, password): - try: - self._client.connect( - self.host, username=username, - password=password, port=self.port - ) - except paramiko.AuthenticationException: - raise Exception( - 'The username and password were not accepted by the server.' - ) - - def _check_auth(self): - transport = self._client.get_transport() - if not transport.is_active() and transport.is_authenticated(): - raise Exception('Not connected to a server.') - - - def check_file(self, remote_path): - """Check if the file at remote_path exists""" - self._check_auth() - sftp = self._client.open_sftp() - try: - sftp.stat(remote_path) - except FileNotFoundError: - return False - return True - - def upload_file(self, local_path, remote_path): - """Upload file at local_path to remote_path - - Both paths must include a filename - """ - self._check_auth() - sftp = self._client.open_sftp() - - # Create the dstination path if it doesn't exist - remote_path = Path(remote_path) - for directory in remote_path.parent.parts: - if directory not in sftp.listdir(): - sftp.mkdir(directory) - sftp.chdir(directory) - # copy the file - # just use filename because our CWD should - # be the full path without the name - sftp.put(local_path, remote_path.name) - - def get_file(self, remote_path, local_path): - self._check_auth() - sftp = self._client.open_sftp() - sftp.get(remote_path, local_path) diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/test/__init__.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/test/test_application.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/test/test_application.py deleted file mode 100644 index 73cc7b4..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/test/test_application.py +++ /dev/null @@ -1,72 +0,0 @@ -from unittest import TestCase -from unittest.mock import patch -from .. import application - - -class TestApplication(TestCase): - records = [ - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '1', 'Seed Sample': 'AX477', - 'Humidity': '24.09', 'Light': '1.03', 'Temperature': '22.01', - 'Equipment Fault': False, 'Plants': '9', 'Blossoms': '21', - 'Fruit': '3', 'Max Height': '8.7', 'Med Height': '2.73', - 'Min Height': '1.67', 'Notes': '\n\n', - }, - {'Date': '2018-06-01', 'Time': '8:00', 'Technician': 'J Simms', - 'Lab': 'A', 'Plot': '2', 'Seed Sample': 'AX478', - 'Humidity': '24.47', 'Light': '1.01', 'Temperature': '21.44', - 'Equipment Fault': False, 'Plants': '14', 'Blossoms': '27', - 'Fruit': '1', 'Max Height': '9.2', 'Med Height': '5.09', - 'Min Height': '2.35', 'Notes': '' - } - ] - - settings = { - 'autofill date': {'type': 'bool', 'value': True}, - 'autofill sheet data': {'type': 'bool', 'value': True}, - 'font size': {'type': 'int', 'value': 9}, - 'font family': {'type': 'str', 'value': ''}, - 'theme': {'type': 'str', 'value': 'default'} - } - - def setUp(self): - # can be parenthesized in python 3.10+ - with \ - patch('abq_data_entry.application.m.CSVModel') as csvmodel,\ - patch('abq_data_entry.application.m.SettingsModel') as settingsmodel,\ - patch('abq_data_entry.application.Application._show_login') as show_login,\ - patch('abq_data_entry.application.v.DataRecordForm'),\ - patch('abq_data_entry.application.v.RecordList'),\ - patch('abq_data_entry.application.ttk.Notebook'),\ - patch('abq_data_entry.application.get_main_menu_for_os')\ - : - - settingsmodel().fields = self.settings - csvmodel().get_all_records.return_value = self.records - show_login.return_value = True - self.app = application.Application() - - def tearDown(self): - self.app.update() - self.app.destroy() - - def test_show_recordlist(self): - self.app._show_recordlist() - self.app.update() - self.app.notebook.select.assert_called_with(self.app.recordlist) - - def test_populate_recordlist(self): - # test correct functions - self.app._populate_recordlist() - self.app.model.get_all_records.assert_called() - self.app.recordlist.populate.assert_called_with(self.records) - - # test exceptions - - self.app.model.get_all_records.side_effect = Exception('Test message') - with patch('abq_data_entry.application.messagebox'): - self.app._populate_recordlist() - application.messagebox.showerror.assert_called_with( - title='Error', message='Problem reading file', - detail='Test message' - ) diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/test/test_models.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/test/test_models.py deleted file mode 100644 index 0cb1baf..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/test/test_models.py +++ /dev/null @@ -1,137 +0,0 @@ -from .. import models -from unittest import TestCase -from unittest import mock - -from pathlib import Path - -class TestCSVModel(TestCase): - - def setUp(self): - - self.file1_open = mock.mock_open( - read_data=( - "Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light," - "Temperature,Equipment Fault,Plants,Blossoms,Fruit,Min Height," - "Max Height,Med Height,Notes\r\n" - "2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,14," - "27,1,2.35,9.2,5.09,\r\n" - "2021-06-01,8:00,J Simms,A,3,AX479,24.15,1,20.82,False,18,49," - "6,2.47,14.2,11.83,\r\n")) - self.file2_open = mock.mock_open(read_data='') - - self.model1 = models.CSVModel('file1') - self.model2 = models.CSVModel('file2') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_all_records(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - records = self.model1.get_all_records() - - self.assertEqual(len(records), 2) - self.assertIsInstance(records, list) - self.assertIsInstance(records[0], dict) - - fields = ( - 'Date', 'Time', 'Technician', 'Lab', 'Plot', - 'Seed Sample', 'Humidity', 'Light', - 'Temperature', 'Equipment Fault', 'Plants', - 'Blossoms', 'Fruit', 'Min Height', 'Max Height', - 'Med Height', 'Notes') - - for field in fields: - self.assertIn(field, records[0].keys()) - - # testing boolean conversion - self.assertFalse(records[0]['Equipment Fault']) - - self.file1_open.assert_called_with( - Path('file1'), 'r', encoding='utf-8' - ) - - @mock.patch('abq_data_entry.models.Path.exists') - def test_get_record(self, mock_path_exists): - mock_path_exists.return_value = True - - with mock.patch( - 'abq_data_entry.models.open', - self.file1_open - ): - record0 = self.model1.get_record(0) - record1 = self.model1.get_record(1) - - self.assertNotEqual(record0, record1) - self.assertEqual(record0['Date'], '2021-06-01') - self.assertEqual(record1['Plot'], '3') - self.assertEqual(record0['Med Height'], '5.09') - - @mock.patch('abq_data_entry.models.Path.exists') - def test_save_record(self, mock_path_exists): - - record = { - "Date": '2021-07-01', "Time": '12:00', - "Technician": 'Test Technician', "Lab": 'E', - "Plot": '17', "Seed Sample": 'test sample', - "Humidity": '10', "Light": '99', - "Temperature": '20', "Equipment Fault": False, - "Plants": '10', "Blossoms": '200', - "Fruit": '250', "Min Height": '40', - "Max Height": '50', "Med Height": '55', - "Notes": 'Test Note\r\nTest Note\r\n' - } - record_as_csv = ( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - - # test appending a file - mock_path_exists.return_value = True - - # test insert - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - self.file2_open.assert_called_with( - Path('file2'), 'a', encoding='utf-8' - ) - file2_handle = self.file2_open() - file2_handle.write.assert_called_with(record_as_csv) - - # test update - with mock.patch('abq_data_entry.models.open', self.file1_open): - self.model1.save_record(record, 1) - self.file1_open.assert_called_with( - Path('file1'), 'w', encoding='utf-8' - ) - file1_handle = self.file1_open() - file1_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call( - '2021-06-01,8:00,J Simms,A,2,AX478,24.47,1.01,21.44,False,' - '14,27,1,2.35,9.2,5.09,\r\n'), - mock.call( - '2021-07-01,12:00,Test Technician,E,17,test sample,10,99,' - '20,False,10,200,250,40,50,55,"Test Note\r\nTest Note\r\n"' - '\r\n') - ]) - - # test new file - mock_path_exists.return_value = False - with mock.patch('abq_data_entry.models.open', self.file2_open): - self.model2.save_record(record, None) - file2_handle = self.file2_open() - file2_handle.write.assert_has_calls([ - mock.call( - 'Date,Time,Technician,Lab,Plot,Seed Sample,Humidity,Light,' - 'Temperature,Equipment Fault,Plants,Blossoms,Fruit,' - 'Min Height,Max Height,Med Height,Notes\r\n'), - mock.call(record_as_csv) - ]) - with self.assertRaises(IndexError): - self.model2.save_record(record, 2) diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py deleted file mode 100644 index e796eb8..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/test/test_widgets.py +++ /dev/null @@ -1,219 +0,0 @@ -from .. import widgets -from unittest import TestCase -from unittest.mock import Mock -import tkinter as tk -from tkinter import ttk - - -class TkTestCase(TestCase): - """A test case designed for Tkinter widgets and views""" - - keysyms = { - '-': 'minus', - ' ': 'space', - ':': 'colon', - # For more see http://www.tcl.tk/man/tcl8.4/TkCmd/keysyms.htm - } - @classmethod - def setUpClass(cls): - cls.root = tk.Tk() - cls.root.wait_visibility() - - @classmethod - def tearDownClass(cls): - cls.root.update() - cls.root.destroy() - - def type_in_widget(self, widget, string): - widget.focus_force() - for char in string: - char = self.keysyms.get(char, char) - self.root.update() - widget.event_generate(''.format(char)) - self.root.update() - - def click_on_widget(self, widget, x, y, button=1): - widget.focus_force() - self.root.update() - widget.event_generate("".format(button), x=x, y=y) - self.root.update() - - -class TestValidatedMixin(TkTestCase): - - def setUp(self): - class TestClass(widgets.ValidatedMixin, ttk.Entry): - pass - self.vw1 = TestClass(self.root) - - def assertEndsWith(self, text, ending): - if not text.endswith(ending): - raise AssertionError( - "'{}' does not end with '{}'".format(text, ending) - ) - - def test_init(self): - - # check error var setup - self.assertIsInstance(self.vw1.error, tk.StringVar) - - # check validation config - self.assertEqual(self.vw1.cget('validate'), 'all') - self.assertEndsWith( - self.vw1.cget('validatecommand'), - '%P %s %S %V %i %d' - ) - self.assertEndsWith( - self.vw1.cget('invalidcommand'), - '%P %s %S %V %i %d' - ) - - def test__validate(self): - - # by default, _validate should return true - args = { - 'proposed': 'abc', - 'current': 'ab', - 'char': 'c', - 'event': 'key', - 'index': '2', - 'action': '1' - } - # test key validate routing - self.assertTrue( - self.vw1._validate(**args) - ) - fake_key_val = Mock(return_value=False) - self.vw1._key_validate = fake_key_val - self.assertFalse( - self.vw1._validate(**args) - ) - fake_key_val.assert_called_with(**args) - - # test focusout validate routing - args['event'] = 'focusout' - self.assertTrue(self.vw1._validate(**args)) - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - self.assertFalse(self.vw1._validate(**args)) - fake_focusout_val.assert_called_with(event='focusout') - - - def test_trigger_focusout_validation(self): - - fake_focusout_val = Mock(return_value=False) - self.vw1._focusout_validate = fake_focusout_val - fake_focusout_invalid = Mock() - self.vw1._focusout_invalid = fake_focusout_invalid - - val = self.vw1.trigger_focusout_validation() - self.assertFalse(val) - fake_focusout_val.assert_called_with(event='focusout') - fake_focusout_invalid.assert_called_with(event='focusout') - - -class TestValidatedSpinbox(TkTestCase): - - def setUp(self): - self.value = tk.DoubleVar() - self.vsb = widgets.ValidatedSpinbox( - self.root, - textvariable=self.value, - from_=-10, to=10, increment=1 - ) - self.vsb.pack() - self.vsb.wait_visibility() - - def tearDown(self): - self.vsb.destroy() - - def key_validate(self, new, current=''): - return self.vsb._key_validate( - new, # inserted char - 'end', # position to insert - current, # current value - current + new, # proposed value - '1' # action code (1 == insert) - ) - - def click_arrow(self, arrow='inc', times=1): - x = self.vsb.winfo_width() - 5 - y = 5 if arrow == 'inc' else 15 - for _ in range(times): - self.click_on_widget(self.vsb, x=x, y=y) - - def test__key_validate(self): - ################### - # Unit-test Style # - ################### - - # test valid input - for x in range(10): - x = str(x) - p_valid = self.vsb._key_validate(x, 'end', '', x, '1') - n_valid = self.vsb._key_validate(x, 'end', '-', '-' + x, '1') - self.assertTrue(p_valid) - self.assertTrue(n_valid) - - # test letters - valid = self.key_validate('a') - self.assertFalse(valid) - - # test non-increment number - valid = self.key_validate('1', '0.') - self.assertFalse(valid) - - # test too high number - valid = self.key_validate('0', '10') - self.assertFalse(valid) - - def test__key_validate_integration(self): - ########################## - # Integration test style # - ########################## - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '10') - self.assertEqual(self.vsb.get(), '10') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, 'abcdef') - self.assertEqual(self.vsb.get(), '') - - self.vsb.delete(0, 'end') - self.type_in_widget(self.vsb, '200') - self.assertEqual(self.vsb.get(), '2') - - def test__focusout_validate(self): - - # test valid - for x in range(10): - self.value.set(x) - posvalid = self.vsb._focusout_validate() - self.value.set(-x) - negvalid = self.vsb._focusout_validate() - - self.assertTrue(posvalid) - self.assertTrue(negvalid) - - # test too low - self.value.set('-200') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - # test invalid number - self.vsb.delete(0, 'end') - self.vsb.insert('end', '-a2-.3') - valid = self.vsb._focusout_validate() - self.assertFalse(valid) - - def test_arrows(self): - self.value.set(0) - self.click_arrow(times=1) - self.assertEqual(self.vsb.get(), '1') - - self.click_arrow(times=5) - self.assertEqual(self.vsb.get(), '6') - - self.click_arrow(arrow='dec', times=1) - self.assertEqual(self.vsb.get(), '5') diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/views.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/views.py deleted file mode 100644 index 7268f80..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/views.py +++ /dev/null @@ -1,703 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from tkinter.simpledialog import Dialog -from datetime import datetime -from . import widgets as w -from .constants import FieldTypes as FT -from . import images - -# new ch15 -import matplotlib -matplotlib.use('TkAgg') -from matplotlib.figure import Figure -from matplotlib.backends.backend_tkagg import ( - FigureCanvasTkAgg, - NavigationToolbar2Tk -) - -class DataRecordForm(tk.Frame): - """The input form for our widgets""" - - var_types = { - FT.string: tk.StringVar, - FT.string_list: tk.StringVar, - FT.short_string_list: tk.StringVar, - FT.iso_date_string: tk.StringVar, - FT.long_string: tk.StringVar, - FT.decimal: tk.DoubleVar, - FT.integer: tk.IntVar, - FT.boolean: tk.BooleanVar - } - - def _add_frame(self, label, style='', cols=3): - """Add a labelframe to the form""" - - frame = ttk.LabelFrame(self, text=label) - if style: - frame.configure(style=style) - frame.grid(sticky=tk.W + tk.E) - for i in range(cols): - frame.columnconfigure(i, weight=1) - return frame - - def __init__(self, parent, model, settings, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - - self.model= model - self.settings = settings - fields = self.model.fields - - # new for ch9 - style = ttk.Style() - - # Frame styles - style.configure( - 'RecordInfo.TLabelframe', - background='khaki', padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe', background='lightblue', - padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe', - background='lightgreen', padx=10, pady=10 - ) - # Style the label Element as well - style.configure( - 'RecordInfo.TLabelframe.Label', background='khaki', - padx=10, pady=10 - ) - style.configure( - 'EnvironmentInfo.TLabelframe.Label', - background='lightblue', padx=10, pady=10 - ) - style.configure( - 'PlantInfo.TLabelframe.Label', - background='lightgreen', padx=10, pady=10 - ) - - # Style for the form labels and buttons - style.configure('RecordInfo.TLabel', background='khaki') - style.configure('RecordInfo.TRadiobutton', background='khaki') - style.configure('EnvironmentInfo.TLabel', background='lightblue') - style.configure( - 'EnvironmentInfo.TCheckbutton', - background='lightblue' - ) - style.configure('PlantInfo.TLabel', background='lightgreen') - - - # Create a dict to keep track of input widgets - self._vars = { - key: self.var_types[spec['type']]() - for key, spec in fields.items() - } - - # Build the form - self.columnconfigure(0, weight=1) - - # new chapter 8 - # variable to track current record id - self.current_record = None - - # Label for displaying what record we're editing - self.record_label = ttk.Label(self) - self.record_label.grid(row=0, column=0) - - # Record info section - r_info = self._add_frame( - "Record Information", 'RecordInfo.TLabelframe' - ) - - # line 1 - w.LabelInput( - r_info, "Date", - field_spec=fields['Date'], - var=self._vars['Date'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - r_info, "Time", - field_spec=fields['Time'], - var=self._vars['Time'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=0, column=1) - # swap order for chapter 12 - w.LabelInput( - r_info, "Lab", - field_spec=fields['Lab'], - var=self._vars['Lab'], - label_args={'style': 'RecordInfo.TLabel'}, - input_args={'style': 'RecordInfo.TRadiobutton'} - ).grid(row=0, column=2) - # line 2 - w.LabelInput( - r_info, "Plot", - field_spec=fields['Plot'], - var=self._vars['Plot'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - r_info, "Technician", - field_spec=fields['Technician'], - var=self._vars['Technician'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - r_info, "Seed Sample", - field_spec=fields['Seed Sample'], - var=self._vars['Seed Sample'], - label_args={'style': 'RecordInfo.TLabel'} - ).grid(row=1, column=2) - - - # Environment Data - e_info = self._add_frame( - "Environment Data", 'EnvironmentInfo.TLabelframe' - ) - - e_info = ttk.LabelFrame( - self, - text="Environment Data", - style='EnvironmentInfo.TLabelframe' - ) - e_info.grid(row=2, column=0, sticky="we") - w.LabelInput( - e_info, "Humidity (g/m³)", - field_spec=fields['Humidity'], - var=self._vars['Humidity'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - e_info, "Light (klx)", - field_spec=fields['Light'], - var=self._vars['Light'], - disable_var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - e_info, "Temperature (°C)", - field_spec=fields['Temperature'], - disable_var=self._vars['Equipment Fault'], - var=self._vars['Temperature'], - label_args={'style': 'EnvironmentInfo.TLabel'} - ).grid(row=0, column=2) - w.LabelInput( - e_info, "Equipment Fault", - field_spec=fields['Equipment Fault'], - var=self._vars['Equipment Fault'], - label_args={'style': 'EnvironmentInfo.TLabel'}, - input_args={'style': 'EnvironmentInfo.TCheckbutton'} - ).grid(row=1, column=0, columnspan=3) - - # Plant Data section - p_info = self._add_frame("Plant Data", 'PlantInfo.TLabelframe') - - w.LabelInput( - p_info, "Plants", - field_spec=fields['Plants'], - var=self._vars['Plants'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=0) - w.LabelInput( - p_info, "Blossoms", - field_spec=fields['Blossoms'], - var=self._vars['Blossoms'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=1) - w.LabelInput( - p_info, "Fruit", - field_spec=fields['Fruit'], - var=self._vars['Fruit'], - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=0, column=2) - # Height data - # create variables to be updated for min/max height - # they can be referenced for min/max variables - min_height_var = tk.DoubleVar(value='-infinity') - max_height_var = tk.DoubleVar(value='infinity') - - w.LabelInput( - p_info, "Min Height (cm)", - field_spec=fields['Min Height'], - var=self._vars['Min Height'], - input_args={"max_var": max_height_var, - "focus_update_var": min_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=0) - w.LabelInput( - p_info, "Max Height (cm)", - field_spec=fields['Max Height'], - var=self._vars['Max Height'], - input_args={"min_var": min_height_var, - "focus_update_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=1) - w.LabelInput( - p_info, "Median Height (cm)", - field_spec=fields['Med Height'], - var=self._vars['Med Height'], - input_args={"min_var": min_height_var, - "max_var": max_height_var}, - label_args={'style': 'PlantInfo.TLabel'} - ).grid(row=1, column=2) - - - # Notes section -- Update grid row value for ch8 - w.LabelInput( - self, "Notes", field_spec=fields['Notes'], - var=self._vars['Notes'], input_args={"width": 85, "height": 10} - ).grid(sticky="nsew", row=4, column=0, padx=10, pady=10) - - # buttons - buttons = tk.Frame(self) - buttons.grid(sticky=tk.W + tk.E, row=5) - self.save_button_logo = tk.PhotoImage(file=images.SAVE_ICON) - self.savebutton = ttk.Button( - buttons, text="Save", command=self._on_save, - image=self.save_button_logo, compound=tk.LEFT - ) - self.savebutton.pack(side=tk.RIGHT) - - self.reset_button_logo = tk.PhotoImage(file=images.RESET_ICON) - self.resetbutton = ttk.Button( - buttons, text="Reset", command=self.reset, - image=self.reset_button_logo, compound=tk.LEFT - ) - self.resetbutton.pack(side=tk.RIGHT) - - # new for ch12 - # Triggers - for field in ('Lab', 'Plot'): - self._vars[field].trace_add( - 'write', self._populate_current_seed_sample) - - for field in ('Date', 'Time', 'Lab'): - self._vars[field].trace_add( - 'write', self._populate_tech_for_lab_check) - - # default the form - self.reset() - - def _on_save(self): - self.event_generate('<>') - - @staticmethod - def tclerror_is_blank_value(exception): - blank_value_errors = ( - 'expected integer but got ""', - 'expected floating-point number but got ""', - 'expected boolean value but got ""' - ) - is_bve = str(exception).strip() in blank_value_errors - return is_bve - - def get(self): - """Retrieve data from form as a dict""" - - # We need to retrieve the data from Tkinter variables - # and place it in regular Python objects - data = dict() - for key, var in self._vars.items(): - try: - data[key] = var.get() - except tk.TclError as e: - if self.tclerror_is_blank_value(e): - data[key] = None - else: - raise e - return data - - def reset(self): - """Resets the form entries""" - - lab = self._vars['Lab'].get() - time = self._vars['Time'].get() - technician = self._vars['Technician'].get() - try: - plot = self._vars['Plot'].get() - except tk.TclError: - plot = '' - plot_values = self._vars['Plot'].label_widget.input.cget('values') - - # clear all values - for var in self._vars.values(): - if isinstance(var, tk.BooleanVar): - var.set(False) - else: - var.set('') - - # Autofill Date - if self.settings['autofill date'].get(): - current_date = datetime.today().strftime('%Y-%m-%d') - self._vars['Date'].set(current_date) - self._vars['Time'].label_widget.input.focus() - - # check if we need to put our values back, then do it. - if ( - self.settings['autofill sheet data'].get() and - plot not in ('', 0, plot_values[-1]) - ): - self._vars['Lab'].set(lab) - self._vars['Time'].set(time) - self._vars['Technician'].set(technician) - next_plot_index = plot_values.index(plot) + 1 - self._vars['Plot'].set(plot_values[next_plot_index]) - self._vars['Seed Sample'].label_widget.input.focus() - - def get_errors(self): - """Get a list of field errors in the form""" - - errors = dict() - for key, var in self._vars.items(): - inp = var.label_widget.input - error = var.label_widget.error - - if hasattr(inp, 'trigger_focusout_validation'): - inp.trigger_focusout_validation() - if error.get(): - errors[key] = error.get() - - return errors - - # rewrite for ch12 - def load_record(self, rowkey, data=None): - """Load a record's data into the form""" - self.current_record = rowkey - if rowkey is None: - self.reset() - self.record_label.config(text='New Record') - else: - date, time, lab, plot = rowkey - title = f'Record for Lab {lab}, Plot {plot} at {date} {time}' - self.record_label.config(text=title) - for key, var in self._vars.items(): - var.set(data.get(key, '')) - try: - var.label_widget.input.trigger_focusout_validation() - except AttributeError: - pass - - # new for ch12 - - def _populate_current_seed_sample(self, *_): - """Auto-populate the current seed sample for Lab and Plot""" - if not self.settings['autofill sheet data'].get(): - return - plot = self._vars['Plot'].get() - lab = self._vars['Lab'].get() - - if plot and lab: - seed = self.model.get_current_seed_sample(lab, plot) - self._vars['Seed Sample'].set(seed) - - def _populate_tech_for_lab_check(self, *_): - """Populate technician based on the current lab check""" - if not self.settings['autofill sheet data'].get(): - return - date = self._vars['Date'].get() - try: - datetime.fromisoformat(date) - except ValueError: - return - time = self._vars['Time'].get() - lab = self._vars['Lab'].get() - - if all([date, time, lab]): - check = self.model.get_lab_check(date, time, lab) - tech = check['lab_tech'] if check else '' - self._vars['Technician'].set(tech) - - -class LoginDialog(Dialog): - """A dialog that asks for username and password""" - - def __init__(self, parent, title, error=''): - - self._pw = tk.StringVar() - self._user = tk.StringVar() - self._error = tk.StringVar(value=error) - super().__init__(parent, title=title) - - def body(self, frame): - """Construct the interface and return the widget for initial focus - - Overridden from Dialog - """ - ttk.Label(frame, text='Login to ABQ').grid(row=0) - - if self._error.get(): - ttk.Label(frame, textvariable=self._error).grid(row=1) - user_inp = w.LabelInput( - frame, 'User name:', input_class=w.RequiredEntry, - var=self._user - ) - user_inp.grid() - w.LabelInput( - frame, 'Password:', input_class=w.RequiredEntry, - input_args={'show': '*'}, var=self._pw - ).grid() - return user_inp.input - - def buttonbox(self): - box = ttk.Frame(self) - ttk.Button( - box, text="Login", command=self.ok, default=tk.ACTIVE - ).grid(padx=5, pady=5) - ttk.Button( - box, text="Cancel", command=self.cancel - ).grid(row=0, column=1, padx=5, pady=5) - self.bind("", self.ok) - self.bind("", self.cancel) - box.pack() - - - def apply(self): - self.result = (self._user.get(), self._pw.get()) - - -class RecordList(tk.Frame): - """Display for CSV file contents""" - - column_defs = { - '#0': {'label': 'Row', 'anchor': tk.W}, - 'Date': {'label': 'Date', 'width': 150, 'stretch': True}, - 'Time': {'label': 'Time'}, - 'Lab': {'label': 'Lab', 'width': 40}, - 'Plot': {'label': 'Plot', 'width': 80} - } - default_width = 100 - default_minwidth = 10 - default_anchor = tk.CENTER - - def __init__(self, parent, *args, **kwargs): - super().__init__(parent, *args, **kwargs) - self._inserted = list() - self._updated = list() - self.columnconfigure(0, weight=1) - self.rowconfigure(0, weight=1) - - # New ch12 - self.iid_map = dict() - - # create treeview - self.treeview = ttk.Treeview( - self, - columns=list(self.column_defs.keys())[1:], - selectmode='browse' - ) - self.treeview.grid(row=0, column=0, sticky='NSEW') - - # Configure treeview columns - for name, definition in self.column_defs.items(): - label = definition.get('label', '') - anchor = definition.get('anchor', self.default_anchor) - minwidth = definition.get('minwidth', self.default_minwidth) - width = definition.get('width', self.default_width) - stretch = definition.get('stretch', False) - self.treeview.heading(name, text=label, anchor=anchor) - self.treeview.column( - name, anchor=anchor, minwidth=minwidth, - width=width, stretch=stretch - ) - - self.treeview.bind('', self._on_open_record) - self.treeview.bind('', self._on_open_record) - - # configure scrollbar for the treeview - self.scrollbar = ttk.Scrollbar( - self, - orient=tk.VERTICAL, - command=self.treeview.yview - ) - self.treeview.configure(yscrollcommand=self.scrollbar.set) - self.scrollbar.grid(row=0, column=1, sticky='NSW') - - # configure tagging - self.treeview.tag_configure('inserted', background='lightgreen') - self.treeview.tag_configure('updated', background='lightblue') - - # For ch12, hide first column since row # is no longer meaningful - self.treeview.config(show='headings') - - # new for ch12 - - # update for ch12 - def populate(self, rows): - """Clear the treeview and write the supplied data rows to it.""" - - for row in self.treeview.get_children(): - self.treeview.delete(row) - - self.iid_map.clear() - - cids = list(self.column_defs.keys())[1:] - for rowdata in rows: - values = [rowdata[key] for key in cids] - rowkey = tuple([str(v) for v in values]) - if rowkey in self._inserted: - tag = 'inserted' - elif rowkey in self._updated: - tag = 'updated' - else: - tag = '' - # new ch12 -- save generated IID, assign to rowkey - iid = self.treeview.insert( - '', 'end', values=values, tag=tag) - self.iid_map[iid] = rowkey - - if len(rows) > 0: - firstrow = self.treeview.identify_row(0) - self.treeview.focus_set() - self.treeview.selection_set(firstrow) - self.treeview.focus(firstrow) - - # update for ch12 - def _on_open_record(self, *_): - """Handle record open request""" - self.event_generate('<>') - - @property - def selected_id(self): - selection = self.treeview.selection() - return self.iid_map[selection[0]] if selection else None - - - def add_updated_row(self, row): - if row not in self._updated: - self._updated.append(row) - - def add_inserted_row(self, row): - if row not in self._inserted: - self._inserted.append(row) - - def clear_tags(self): - self._inserted.clear() - self._updated.clear() - - -# New ch15 - -class LineChartView(tk.Canvas): - """A generic view for plotting a line chart""" - - margin = 20 - colors = [ - 'red', 'orange', 'yellow', 'green', - 'blue', 'purple', 'violet', - # add more for more complex plots - ] - - def __init__( - self, parent, data, plot_size, - x_field, y_field, plot_by_field - ): - self.data = data - self.x_field = x_field - self.y_field = y_field - self.plot_by_field = plot_by_field - - # calculate view size - self.plot_width, self.plot_height = plot_size - view_width = self.plot_width + (2 * self.margin) - view_height = self.plot_height + (2 * self.margin) - - super().__init__( - parent, width=view_width, - height=view_height, background='lightgrey' - ) - # Draw chart - self.origin = (self.margin, view_height - self.margin) - self.create_line( - self.origin, (self.margin, self.margin), width=2 - ) - self.create_line( - self.origin, - (view_width - self.margin, view_height - self.margin) - ) - self.create_text( - (view_width // 2, view_height - self.margin), - text=x_field, anchor='n' - ) - self.create_text( - (self.margin, view_height // 2), - text=y_field, angle=90, anchor='s' - ) - self.plot_area = tk.Canvas( - self, background='#555', - width=self.plot_width, height=self.plot_height - ) - self.create_window( - self.origin, window=self.plot_area, anchor='sw' - ) - - # Draw legend and lines - plot_names = sorted(set([ - row[self.plot_by_field] - for row in self.data - ])) - - color_map = list(zip(plot_names, self.colors)) - - for plot_name, color in color_map: - dataxy = [ - (row[x_field], row[y_field]) - for row in data - if row[plot_by_field] == plot_name - ] - self._plot_line(dataxy, color) - - self._draw_legend(color_map) - - - def _plot_line(self, data, color): - """Plot a line described by data in the given color""" - - max_x = max([row[0] for row in data]) - max_y = max([row[1] for row in data]) - x_scale = self.plot_width / max_x - y_scale = self.plot_height / max_y - coords = [ - (round(x * x_scale), self.plot_height - round(y * y_scale)) - for x, y in data - ] - self.plot_area.create_line( - *coords, width=4, fill=color, smooth=True - ) - - def _draw_legend(self, color_map): - # determine legend - y = 10 - for label, color in color_map: - self.plot_area.create_text((10, y), text=label, fill=color, anchor='w') - y += 20 - - -class YieldChartView(tk.Frame): - - def __init__(self, parent, x_axis, y_axis, title): - super().__init__(parent) - self.figure = Figure(figsize=(6, 4), dpi=100) - self.canvas_tkagg = FigureCanvasTkAgg(self.figure, master=self) - canvas = self.canvas_tkagg.get_tk_widget() - canvas.pack(fill='both', expand=True) - self.toolbar = NavigationToolbar2Tk(self.canvas_tkagg, self) - self.axes = self.figure.add_subplot(1, 1, 1) - self.axes.set_xlabel(x_axis) - self.axes.set_ylabel(y_axis) - self.axes.set_title(title) - self.scatters = list() - self.scatter_labels = list() - - def draw_scatter(self, data, color, label): - x, y, s = zip(*data) - s = [(x ** 2)//2 for x in s] - scatter = self.axes.scatter( - x, y, s, - c=color, label=label, alpha=0.5 - ) - self.scatters.append(scatter) - self.scatter_labels.append(label) - self.axes.legend(self.scatters, self.scatter_labels) diff --git a/Chapter16/ABQ_Data_Entry/abq_data_entry/widgets.py b/Chapter16/ABQ_Data_Entry/abq_data_entry/widgets.py deleted file mode 100644 index ec72ed4..0000000 --- a/Chapter16/ABQ_Data_Entry/abq_data_entry/widgets.py +++ /dev/null @@ -1,441 +0,0 @@ -import tkinter as tk -from tkinter import ttk -from datetime import datetime -from decimal import Decimal, InvalidOperation -from .constants import FieldTypes as FT - - -################## -# Widget Classes # -################## - -class ValidatedMixin: - """Adds a validation functionality to an input widget""" - - def __init__(self, *args, error_var=None, **kwargs): - self.error = error_var or tk.StringVar() - super().__init__(*args, **kwargs) - - vcmd = self.register(self._validate) - invcmd = self.register(self._invalid) - - style = ttk.Style() - widget_class = self.winfo_class() - validated_style = 'ValidatedInput.' + widget_class - style.map( - validated_style, - foreground=[('invalid', 'white'), ('!invalid', 'black')], - fieldbackground=[('invalid', 'darkred'), ('!invalid', 'white')] - ) - self.configure(style=validated_style) - - self.configure( - validate='all', - validatecommand=(vcmd, '%P', '%s', '%S', '%V', '%i', '%d'), - invalidcommand=(invcmd, '%P', '%s', '%S', '%V', '%i', '%d') - ) - - def _toggle_error(self, on=False): - self.configure(foreground=('red' if on else 'black')) - - def _validate(self, proposed, current, char, event, index, action): - """The validation method. - - Don't override this, override _key_validate, and _focus_validate - """ - self.error.set('') - - valid = True - # if the widget is disabled, don't validate - state = str(self.configure('state')[-1]) - if state == tk.DISABLED: - return valid - - if event == 'focusout': - valid = self._focusout_validate(event=event) - elif event == 'key': - valid = self._key_validate( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - return valid - - def _focusout_validate(self, **kwargs): - return True - - def _key_validate(self, **kwargs): - return True - - def _invalid(self, proposed, current, char, event, index, action): - if event == 'focusout': - self._focusout_invalid(event=event) - elif event == 'key': - self._key_invalid( - proposed=proposed, - current=current, - char=char, - event=event, - index=index, - action=action - ) - - def _focusout_invalid(self, **kwargs): - """Handle invalid data on a focus event""" - pass - - def _key_invalid(self, **kwargs): - """Handle invalid data on a key event. By default we want to do nothing""" - pass - - def trigger_focusout_validation(self): - valid = self._validate('', '', '', 'focusout', '', '') - if not valid: - self._focusout_invalid(event='focusout') - return valid - - -class DateEntry(ValidatedMixin, ttk.Entry): - - def _key_validate(self, action, index, char, **kwargs): - valid = True - - if action == '0': # This is a delete action - valid = True - elif index in ('0', '1', '2', '3', '5', '6', '8', '9'): - valid = char.isdigit() - elif index in ('4', '7'): - valid = char == '-' - else: - valid = False - return valid - - def _focusout_validate(self, event): - valid = True - if not self.get(): - self.error.set('A value is required') - valid = False - try: - datetime.strptime(self.get(), '%Y-%m-%d') - except ValueError: - self.error.set('Invalid date') - valid = False - return valid - - -class RequiredEntry(ValidatedMixin, ttk.Entry): - - def _focusout_validate(self, event): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedCombobox(ValidatedMixin, ttk.Combobox): - - def _key_validate(self, proposed, action, **kwargs): - valid = True - # if the user tries to delete, - # just clear the field - if action == '0': - self.set('') - return True - - # get our values list - values = self.cget('values') - # Do a case-insensitve match against the entered text - matching = [ - x for x in values - if x.lower().startswith(proposed.lower()) - ] - if len(matching) == 0: - valid = False - elif len(matching) == 1: - self.set(matching[0]) - self.icursor(tk.END) - valid = False - return valid - - def _focusout_validate(self, **kwargs): - valid = True - if not self.get(): - valid = False - self.error.set('A value is required') - return valid - - -class ValidatedSpinbox(ValidatedMixin, ttk.Spinbox): - """A Spinbox that only accepts Numbers""" - - def __init__(self, *args, min_var=None, max_var=None, - focus_update_var=None, from_='-Infinity', to='Infinity', **kwargs - ): - super().__init__(*args, from_=from_, to=to, **kwargs) - increment = Decimal(str(kwargs.get('increment', '1.0'))) - self.precision = increment.normalize().as_tuple().exponent - # there should always be a variable, - # or some of our code will fail - self.variable = kwargs.get('textvariable') - if not self.variable: - self.variable = tk.DoubleVar() - self.configure(textvariable=self.variable) - - if min_var: - self.min_var = min_var - self.min_var.trace_add('write', self._set_minimum) - if max_var: - self.max_var = max_var - self.max_var.trace_add('write', self._set_maximum) - self.focus_update_var = focus_update_var - self.bind('', self._set_focus_update_var) - - def _set_focus_update_var(self, event): - value = self.get() - if self.focus_update_var and not self.error.get(): - self.focus_update_var.set(value) - - def _set_minimum(self, *_): - current = self.get() - try: - new_min = self.min_var.get() - self.config(from_=new_min) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _set_maximum(self, *_): - current = self.get() - try: - new_max = self.max_var.get() - self.config(to=new_max) - except (tk.TclError, ValueError): - pass - if not current: - self.delete(0, tk.END) - else: - self.variable.set(current) - self.trigger_focusout_validation() - - def _key_validate( - self, char, index, current, proposed, action, **kwargs - ): - if action == '0': - return True - valid = True - min_val = self.cget('from') - max_val = self.cget('to') - no_negative = min_val >= 0 - no_decimal = self.precision >= 0 - - # First, filter out obviously invalid keystrokes - if any([ - (char not in '-1234567890.'), - (char == '-' and (no_negative or index != '0')), - (char == '.' and (no_decimal or '.' in current)) - ]): - return False - - # At this point, proposed is either '-', '.', '-.', - # or a valid Decimal string - if proposed in '-.': - return True - - # Proposed is a valid Decimal string - # convert to Decimal and check more: - proposed = Decimal(proposed) - proposed_precision = proposed.as_tuple().exponent - - if any([ - (proposed > max_val), - (proposed_precision < self.precision) - ]): - return False - - return valid - - def _focusout_validate(self, **kwargs): - valid = True - value = self.get() - min_val = self.cget('from') - max_val = self.cget('to') - - try: - d_value = Decimal(value) - except InvalidOperation: - self.error.set(f'Invalid number string: {value}') - return False - - if d_value < min_val: - self.error.set(f'Value is too low (min {min_val})') - valid = False - if d_value > max_val: - self.error.set(f'Value is too high (max {max_val})') - valid = False - - return valid - -class ValidatedRadioGroup(ttk.Frame): - """A validated radio button group""" - - def __init__( - self, *args, variable=None, error_var=None, - values=None, button_args=None, **kwargs - ): - super().__init__(*args, **kwargs) - self.variable = variable or tk.StringVar() - self.error = error_var or tk.StringVar() - self.values = values or list() - button_args = button_args or dict() - - for v in self.values: - button = ttk.Radiobutton( - self, value=v, text=v, variable=self.variable, **button_args - ) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.bind('', self.trigger_focusout_validation) - - def trigger_focusout_validation(self, *_): - self.error.set('') - if not self.variable.get(): - self.error.set('A value is required') - - -class BoundText(tk.Text): - """A Text widget with a bound variable.""" - - def __init__(self, *args, textvariable=None, **kwargs): - super().__init__(*args, **kwargs) - self._variable = textvariable - if self._variable: - # insert any default value - self.insert('1.0', self._variable.get()) - self._variable.trace_add('write', self._set_content) - self.bind('<>', self._set_var) - - def _set_var(self, *_): - """Set the variable to the text contents""" - if self.edit_modified(): - content = self.get('1.0', 'end-1chars') - self._variable.set(content) - self.edit_modified(False) - - def _set_content(self, *_): - """Set the text contents to the variable""" - self.delete('1.0', tk.END) - self.insert('1.0', self._variable.get()) - - -########################### -# Compound Widget Classes # -########################### - - -class LabelInput(ttk.Frame): - """A widget containing a label and input together.""" - - field_types = { - FT.string: RequiredEntry, - FT.string_list: ValidatedCombobox, - FT.short_string_list: ValidatedRadioGroup, - FT.iso_date_string: DateEntry, - FT.long_string: BoundText, - FT.decimal: ValidatedSpinbox, - FT.integer: ValidatedSpinbox, - FT.boolean: ttk.Checkbutton - } - - def __init__( - self, parent, label, var, input_class=None, - input_args=None, label_args=None, field_spec=None, - disable_var=None, **kwargs - ): - super().__init__(parent, **kwargs) - input_args = input_args or {} - label_args = label_args or {} - self.variable = var - self.variable.label_widget = self - - # Process the field spec to determine input_class and validation - if field_spec: - field_type = field_spec.get('type', FT.string) - input_class = input_class or self.field_types.get(field_type) - # min, max, increment - if 'min' in field_spec and 'from_' not in input_args: - input_args['from_'] = field_spec.get('min') - if 'max' in field_spec and 'to' not in input_args: - input_args['to'] = field_spec.get('max') - if 'inc' in field_spec and 'increment' not in input_args: - input_args['increment'] = field_spec.get('inc') - # values - if 'values' in field_spec and 'values' not in input_args: - input_args['values'] = field_spec.get('values') - - # setup the label - if input_class in (ttk.Checkbutton, ttk.Button): - # Buttons don't need labels, they're built-in - input_args["text"] = label - else: - self.label = ttk.Label(self, text=label, **label_args) - self.label.grid(row=0, column=0, sticky=(tk.W + tk.E)) - - # setup the variable - if input_class in ( - ttk.Checkbutton, ttk.Button, ttk.Radiobutton, ValidatedRadioGroup - ): - input_args["variable"] = self.variable - else: - input_args["textvariable"] = self.variable - - # Setup the input - if input_class == ttk.Radiobutton: - # for Radiobutton, create one input per value - self.input = tk.Frame(self) - for v in input_args.pop('values', []): - button = input_class( - self.input, value=v, text=v, **input_args) - button.pack(side=tk.LEFT, ipadx=10, ipady=2, expand=True, fill='x') - self.input.error = getattr(button, 'error', None) - self.input.trigger_focusout_validation = \ - button._focusout_validate - else: - self.input = input_class(self, **input_args) - - self.input.grid(row=1, column=0, sticky=(tk.W + tk.E)) - self.columnconfigure(0, weight=1) - - # Set up error handling & display - error_style = 'Error.' + label_args.get('style', 'TLabel') - ttk.Style().configure(error_style, foreground='darkred') - self.error = getattr(self.input, 'error', tk.StringVar()) - ttk.Label(self, textvariable=self.error, style=error_style).grid( - row=2, column=0, sticky=(tk.W + tk.E) - ) - - # Set up disable variable - if disable_var: - self.disable_var = disable_var - self.disable_var.trace_add('write', self._check_disable) - - def _check_disable(self, *_): - if not hasattr(self, 'disable_var'): - return - - if self.disable_var.get(): - self.input.configure(state=tk.DISABLED) - self.variable.set('') - self.error.set('') - else: - self.input.configure(state=tk.NORMAL) - - def grid(self, sticky=(tk.E + tk.W), **kwargs): - """Override grid to add default sticky values""" - super().grid(sticky=sticky, **kwargs) diff --git a/Chapter16/ABQ_Data_Entry/cxsetup-minimal.py b/Chapter16/ABQ_Data_Entry/cxsetup-minimal.py deleted file mode 100644 index f63674b..0000000 --- a/Chapter16/ABQ_Data_Entry/cxsetup-minimal.py +++ /dev/null @@ -1,23 +0,0 @@ -import cx_Freeze as cx - -include_files = [('abq_data_entry/images', 'images')] - -cx.setup( - name='ABQ_Data_Entry', - version='1.0', - author='Alan D Moore', - author_email='alandmoore@example.com', - description='Data entry application for ABQ Agrilabs', - url="http://abq.example.com/", - packages=['abq_data_entry'], - executables=[ - cx.Executable('abq_data_entry.py', - targetName='abq', icon='abq.ico')], - options={ - 'build_exe': { - 'packages': ['psycopg2', 'requests', 'matplotlib', 'numpy'], - 'includes': ['idna.idnadata', 'zlib'], - 'include_files': include_files - } - } -) diff --git a/Chapter16/ABQ_Data_Entry/cxsetup.py b/Chapter16/ABQ_Data_Entry/cxsetup.py deleted file mode 100644 index 8d0a0a7..0000000 --- a/Chapter16/ABQ_Data_Entry/cxsetup.py +++ /dev/null @@ -1,63 +0,0 @@ -import cx_Freeze as cx -import platform -import os - -base = None -target_name = 'abq' -if platform.system() == "Windows": - base = "Win32GUI" - -shortcut_data = [ - # (Type, Folder, Name, ?, Target exe, arguments, description, hotkey, icon, icon index, show cmd, Working dir) - ( - 'DesktopShortcut', 'DesktopFolder', 'ABQ Data Entry', 'TARGETDIR', - '[TARGETDIR]' + target_name, None, - 'Data Entry application for ABQ Agrilabs', None, - None, None, None, 'TARGETDIR' - ), - ( - 'MenuShortcut', 'ProgramMenuFolder', 'ABQ Data Entry', 'TARGETDIR', - '[TARGETDIR]' + target_name, None, - 'Data Entry application for ABQ Agrilabs', None, - None, None, None, 'TARGETDIR' - ), -] - -cx.setup( - name='ABQ_Data_Entry', - version='1.0', - author='Alan D Moore', - author_email='alandmoore@example.com', - description='Data entry application for ABQ Agrilabs', - url="http://abq.example.com/", - packages=['abq_data_entry'], - executables=[ - cx.Executable( - 'abq_data_entry/__main__.py', base=base, - target_name=target_name, - icon='abq.ico' - ) - ], - options={ - 'build_exe': { - 'packages': ['psycopg2', 'requests', 'matplotlib', 'numpy', 'paramiko'], - 'includes': [], - 'excludes': [ - 'PyQt4', 'PyQt5', 'PySide', 'IPython', - 'jupyter_client', 'jupyter_core', 'ipykernel', - 'ipython_genutils' - ], - 'include_files': [('abq_data_entry/images', 'images')] - }, - 'bdist_msi': { - # can be generated in powershell: "{"+[System.Guid]::NewGuid().ToString().ToUpper()+"}" - 'upgrade_code': '{12345678-90AB-CDEF-1234-567890ABCDEF}', - 'data': {'Shortcut': shortcut_data} - }, - 'bdist_mac': { - # Sets the application name - 'bundle_name': 'ABQ-Data-Entry', - 'iconfile': 'abq.icns' - } - } -) diff --git a/Chapter16/ABQ_Data_Entry/docs/Application_layout.png b/Chapter16/ABQ_Data_Entry/docs/Application_layout.png deleted file mode 100644 index 93990f2..0000000 Binary files a/Chapter16/ABQ_Data_Entry/docs/Application_layout.png and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/docs/abq_data_entry_spec.rst b/Chapter16/ABQ_Data_Entry/docs/abq_data_entry_spec.rst deleted file mode 100644 index fec5e84..0000000 --- a/Chapter16/ABQ_Data_Entry/docs/abq_data_entry_spec.rst +++ /dev/null @@ -1,97 +0,0 @@ -====================================== - ABQ Data Entry Program specification -====================================== - - -Description ------------ -The program is being created to minimize data entry errors for laboratory measurements. - -Functionality Required ----------------------- - -The program must: - -* Provide a UI for reading, updating, and appending data to the CSV file -* allow all relevant, valid data to be entered, as per the field chart -* append entered data to a CSV file - - The CSV file must have a filename of abq_data_record_CURRENTDATE.csv, - where CURRENTDATE is the date of the checks in ISO format (Year-month-day) - - The CSV file must have all the fields as per the chart - -* enforce correct datatypes per field -* have inputs that: - - ignore meaningless keystrokes - - display an error if the value is invalid on focusout - - display an error if a required field is empty on focusout -* prevent saving the record when errors are present - -The program should try, whenever possible, to: - -* enforce reasonable limits on data entered -* Auto-fill data -* Suggest likely correct values -* Provide a smooth and efficient workflow - -Functionality Not Required --------------------------- - -The program does not need to: - -* Allow deletion of data. - -Limitations ------------ - -The program must: - -* Be efficiently operable by keyboard-only users. -* Be accessible to color blind users. -* Run on Debian Linux. -* Run acceptably on a low-end PC. - -Data Dictionary ---------------- -+------------+----------+------+------------------+--------------------------+ -|Field | Datatype | Units| Range |Descripton | -+============+==========+======+==================+==========================+ -|Date |Date | | |Date of record | -+------------+----------+------+------------------+--------------------------+ -|Time |Time | |8:00, 12:00, |Time period | -| | | |16:00, or 20:00 | | -+------------+----------+------+------------------+--------------------------+ -|Lab |String | | A - C |Lab ID | -+------------+----------+------+------------------+--------------------------+ -|Technician |String | | |Technician name | -+------------+----------+------+------------------+--------------------------+ -|Plot |Int | | 1 - 20 |Plot ID | -+------------+----------+------+------------------+--------------------------+ -|Seed |String | | |Seed sample ID | -|sample | | | | | -+------------+----------+------+------------------+--------------------------+ -|Fault |Bool | | |Fault on environmental | -| | | | |sensor | -+------------+----------+------+------------------+--------------------------+ -|Light |Decimal |klx | 0 - 100 |Light at plot | -+------------+----------+------+------------------+--------------------------+ -|Humidity |Decimal |g/m³ | 0.5 - 52.0 |Abs humidity at plot | -+------------+----------+------+------------------+--------------------------+ -|Temperature |Decimal |°C | 4 - 40 |Temperature at plot | -+------------+----------+------+------------------+--------------------------+ -|Blossoms |Int | | 0 - 1000 |Number of blossoms in plot| -+------------+----------+------+------------------+--------------------------+ -|Fruit |Int | | 0 - 1000 |Number of fruits in plot | -+------------+----------+------+------------------+--------------------------+ -|Plants |Int | | 0 - 20 |Number of plants in plot | -+------------+----------+------+------------------+--------------------------+ -|Max height |Decimal |cm | 0 - 1000 |Height of tallest plant in| -| | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Min height |Decimal |cm | 0 - 1000 |Height of shortest plant | -| | | | |in plot | -+------------+----------+------+------------------+--------------------------+ -|Median |Decimal |cm | 0 - 1000 |Median height of plants in| -|height | | | |plot | -+------------+----------+------+------------------+--------------------------+ -|Notes |String | | |Miscellaneous notes | -+------------+----------+------+------------------+--------------------------+ diff --git a/Chapter16/ABQ_Data_Entry/docs/lab-tech-paper-form.png b/Chapter16/ABQ_Data_Entry/docs/lab-tech-paper-form.png deleted file mode 100644 index 2315a2d..0000000 Binary files a/Chapter16/ABQ_Data_Entry/docs/lab-tech-paper-form.png and /dev/null differ diff --git a/Chapter16/ABQ_Data_Entry/pyproject.toml b/Chapter16/ABQ_Data_Entry/pyproject.toml deleted file mode 100644 index f8d8975..0000000 --- a/Chapter16/ABQ_Data_Entry/pyproject.toml +++ /dev/null @@ -1,6 +0,0 @@ -[build-system] -requires = [ - "setuptools", - "wheel" -] -build-backend = "setuptools.build_meta" \ No newline at end of file diff --git a/Chapter16/ABQ_Data_Entry/requirements.txt b/Chapter16/ABQ_Data_Entry/requirements.txt deleted file mode 100644 index 55731bb..0000000 --- a/Chapter16/ABQ_Data_Entry/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ ---index-url https://pypi.python.org/simple/ - -# Runtime -requests -paramiko -matplotlib -psycopg2 - -# For testing REST: -flask diff --git a/Chapter16/ABQ_Data_Entry/setup.py b/Chapter16/ABQ_Data_Entry/setup.py deleted file mode 100644 index 0890e4d..0000000 --- a/Chapter16/ABQ_Data_Entry/setup.py +++ /dev/null @@ -1,30 +0,0 @@ -from setuptools import setup - -with open('README.rst', 'r') as fh: - long_description = fh.read() - -setup( - name='ABQ_Data_Entry', - version='1.0', - author='Alan D Moore', - author_email='alandmoore@example.com', - description='Data entry application for ABQ AgriLabs', - url="http://abq.example.com/", - license='ABQ corporate license', - long_description=long_description, - packages=[ - 'abq_data_entry', - 'abq_data_entry.images', - 'abq_data_entry.test' - ], - install_requires=[ - 'requests', 'paramiko', 'matplotlib', 'psycopg2' - ], - python_requires='>=3.6', - package_data={'abq_data_entry.images': ['*.png', '*.xbm']}, - entry_points={ - 'console_scripts': [ - 'abq = abq_data_entry.__main__:main' - ] - } -) diff --git a/Chapter16/ABQ_Data_Entry/sql/abq_sample_data.sql b/Chapter16/ABQ_Data_Entry/sql/abq_sample_data.sql deleted file mode 100644 index fd4316c..0000000 --- a/Chapter16/ABQ_Data_Entry/sql/abq_sample_data.sql +++ /dev/null @@ -1,1767 +0,0 @@ -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 4291); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 4478); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 4319); -INSERT INTO lab_checks (date, "time", lab_id, lab_tech_id) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 4291); - - -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 3, 'AXM479', 24.17, 0.97, 21.33, false, 15, 13, 1, 14.20, 1.56, 11.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 7, 'AXM479', 24.25, 0.99, 20.43, false, 2, 6, 0, 11.58, 2.27, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 11, 'AXM479', 24.15, 0.98, 21.06, false, 13, 13, 1, 10.90, 1.90, 6.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 15, 'AXM479', 24.24, 1.01, 22.03, false, 34, 20, 3, 18.16, 1.77, 15.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 19, 'AXM479', 24.43, 1.01, 21.05, false, 11, 11, 1, 19.18, 1.99, 13.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 3, 'AXM479', 24.50, 0.98, 20.91, false, 26, 17, 4, 14.20, 2.19, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 7, 'AXM479', 24.06, 0.98, 20.20, false, 0, 0, 0, 16.36, 2.25, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 11, 'AXM479', 23.97, 1.03, 21.29, false, 10, 11, 0, 16.00, 2.09, 7.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 15, 'AXM479', 23.94, 1.01, 21.33, false, 28, 16, 4, 18.50, 2.21, 18.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 19, 'AXM479', 23.86, 1.02, 20.35, false, 5, 8, 0, 9.86, 1.71, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 3, 'AXM479', 24.42, 1.03, 21.93, false, 39, 14, 0, 14.20, 1.96, 13.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 7, 'AXM479', 23.61, 0.97, 20.21, false, 1, 2, 0, 15.40, 1.68, 2.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 11, 'AXM479', 24.48, 1.00, 20.74, false, 1, 13, 0, 16.04, 1.53, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 15, 'AXM479', 23.93, 1.00, 20.35, false, 32, 18, 2, 17.05, 1.52, 3.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 19, 'AXM479', 23.71, 0.99, 20.48, false, 21, 14, 2, 17.33, 1.65, 11.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 4, 'AXM480', 23.63, 1.03, 21.89, false, 5, 5, 1, 16.27, 2.23, 13.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 2, 'AXM478', 23.62, 1.03, 20.26, false, 34, 17, 5, 9.20, 1.74, 3.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 6, 'AXM478', 23.93, 1.00, 20.59, false, 6, 3, 1, 12.20, 2.21, 4.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 10, 'AXM478', 24.09, 0.98, 20.29, false, 1, 2, 0, 14.27, 1.62, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 14, 'AXM478', 24.35, 1.02, 21.68, false, 9, 12, 0, 13.41, 1.69, 6.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 18, 'AXM478', 23.88, 1.02, 20.26, false, 11, 8, 2, 8.46, 1.85, 6.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 2, 'AXM478', 23.64, 1.02, 21.67, false, 41, 3, 2, 9.20, 1.77, 6.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 6, 'AXM478', 24.49, 1.01, 21.31, false, 30, 17, 3, 18.72, 1.79, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 10, 'AXM478', 23.59, 1.00, 20.98, false, 10, 14, 1, 7.98, 2.03, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 14, 'AXM478', 24.32, 0.97, 20.78, false, 5, 8, 1, 14.82, 1.75, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 18, 'AXM478', 23.61, 1.00, 20.35, false, 33, 18, 1, 14.25, 2.18, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 2, 'AXM478', 24.41, 0.98, 20.17, false, 21, 7, 2, 9.20, 2.01, 3.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 6, 'AXM478', 24.28, 0.99, 20.39, false, 8, 14, 1, 13.58, 1.51, 3.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 10, 'AXM478', 23.57, 1.01, 21.87, false, 21, 19, 1, 13.55, 2.02, 5.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 14, 'AXM478', 24.11, 1.03, 20.44, false, 20, 11, 1, 10.10, 2.49, 5.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 18, 'AXM478', 24.35, 0.99, 20.25, false, 12, 9, 2, 18.41, 1.88, 9.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 8, 'AXM480', 23.59, 1.00, 20.79, false, 27, 20, 0, 16.44, 1.99, 2.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 12, 'AXM480', 23.71, 0.99, 21.00, false, 11, 15, 2, 15.55, 1.99, 5.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 16, 'AXM480', 24.15, 1.01, 20.84, false, 12, 20, 1, 7.59, 2.18, 2.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 20, 'AXM480', 24.13, 1.02, 22.02, false, 5, 11, 1, 7.32, 2.07, 2.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 4, 'AXM480', 24.33, 1.01, 21.08, false, 7, 8, 0, 7.06, 2.32, 5.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 8, 'AXM480', 23.90, 1.03, 22.00, false, 4, 10, 1, 18.24, 2.02, 6.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 12, 'AXM480', 23.75, 1.01, 21.98, false, 6, 5, 1, 17.15, 1.53, 1.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 16, 'AXM480', 23.74, 0.99, 21.92, false, 0, 3, 0, 10.57, 1.59, 3.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 20, 'AXM480', 23.52, 0.99, 21.71, false, 6, 15, 1, 16.82, 1.94, 7.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 4, 'AXM480', 24.24, 0.99, 21.23, false, 19, 15, 2, 17.08, 2.18, 15.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 8, 'AXM480', 24.05, 1.02, 22.00, false, 13, 8, 1, 9.82, 2.38, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 12, 'AXM480', 24.46, 1.02, 21.33, false, 5, 5, 0, 14.71, 1.53, 2.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 16, 'AXM480', 24.39, 0.98, 21.82, false, 20, 10, 1, 11.26, 2.21, 4.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 20, 'AXM480', 23.53, 0.98, 21.34, false, 31, 19, 5, 8.25, 2.16, 8.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 3, 'AXM479', 24.60, 9.81, 24.90, false, 16, 13, 1, 14.36, 1.86, 11.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 7, 'AXM479', 24.32, 10.26, 24.71, false, 3, 7, 0, 11.70, 2.45, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 11, 'AXM479', 26.14, 10.46, 25.26, false, 13, 13, 1, 11.06, 2.08, 6.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 15, 'AXM479', 28.21, 9.97, 24.02, false, 36, 20, 4, 18.19, 1.99, 15.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 19, 'AXM479', 27.14, 9.50, 24.57, false, 11, 11, 2, 19.31, 2.13, 13.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 3, 'AXM479', 26.73, 9.62, 25.51, false, 27, 17, 4, 14.23, 2.50, 4.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 7, 'AXM479', 25.69, 10.31, 25.39, false, 0, 1, 1, 16.37, 2.35, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 11, 'AXM479', 25.82, 9.69, 25.70, false, 11, 11, 1, 16.16, 2.11, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 15, 'AXM479', 24.35, 9.59, 24.79, false, 29, 17, 4, 18.56, 2.49, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 19, 'AXM479', 27.32, 9.88, 25.64, false, 5, 8, 0, 9.92, 2.08, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 3, 'AXM479', 27.97, 10.29, 24.38, false, 41, 15, 1, 14.30, 2.09, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 7, 'AXM479', 23.70, 9.71, 24.53, false, 1, 2, 0, 15.44, 1.75, 2.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 3, 'AXM479', 28.34, 8.96, 26.08, false, 27, 18, 5, 14.30, 2.67, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 6, 'AXM478', 24.90, 10.22, 24.35, false, 7, 3, 2, 12.31, 2.44, 4.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 10, 'AXM478', 25.80, 9.67, 25.46, false, 2, 2, 0, 14.47, 1.87, 4.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 14, 'AXM478', 26.70, 10.39, 24.78, false, 10, 13, 1, 13.59, 1.73, 6.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 18, 'AXM478', 24.88, 9.70, 24.80, false, 13, 8, 2, 8.58, 2.16, 6.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 2, 'AXM478', 24.32, 9.80, 24.26, false, 43, 4, 2, 9.25, 1.79, 7.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 6, 'AXM478', 25.76, 10.28, 24.87, false, 32, 18, 3, 18.90, 2.02, 8.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 10, 'AXM478', 27.36, 10.15, 24.98, false, 10, 15, 1, 8.13, 2.35, 5.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 14, 'AXM478', 27.28, 10.18, 25.21, false, 5, 8, 2, 14.85, 1.85, 14.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 18, 'AXM478', 26.30, 9.83, 24.33, false, 33, 18, 1, 14.34, 2.20, 11.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 2, 'AXM478', 27.09, 10.33, 24.69, false, 23, 8, 3, 9.34, 2.16, 3.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 6, 'AXM478', 25.58, 10.42, 24.64, false, 10, 14, 2, 13.64, 1.88, 3.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 4, 'AXM480', 26.13, 10.30, 24.31, false, 5, 5, 2, 16.35, 2.34, 14.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 8, 'AXM480', 25.54, 10.07, 24.60, false, 28, 20, 1, 16.55, 2.05, 2.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 12, 'AXM480', 26.51, 10.46, 24.94, false, 13, 16, 2, 15.56, 2.10, 5.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 16, 'AXM480', 26.37, 9.64, 24.95, false, 12, 20, 2, 7.78, 2.41, 2.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 20, 'AXM480', 27.08, 10.29, 25.37, false, 6, 11, 1, 7.39, 2.38, 2.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 4, 'AXM480', 26.41, 10.37, 25.76, false, 9, 9, 0, 7.24, 2.48, 5.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 8, 'AXM480', 27.08, 10.36, 24.54, false, 5, 10, 2, 18.39, 2.16, 6.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 12, 'AXM480', 26.62, 9.94, 25.01, false, 6, 6, 2, 17.33, 1.69, 1.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 16, 'AXM480', 24.32, 9.88, 25.22, false, 2, 4, 0, 10.62, 1.76, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 20, 'AXM480', 26.62, 9.60, 25.84, false, 6, 15, 2, 16.84, 2.20, 7.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 4, 'AXM480', 27.93, 9.83, 24.86, false, 19, 16, 3, 17.21, 2.50, 15.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 2, 'AXM478', 24.89, 10.20, 26.01, false, 35, 17, 6, 9.27, 1.86, 3.87, ' -'); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 11, 'AXM479', 26.99, 10.15, 24.59, false, 1, 13, 0, 16.11, 1.68, 6.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 15, 'AXM479', 24.81, 9.90, 24.74, false, 33, 18, 3, 17.25, 1.52, 3.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 19, 'AXM479', 24.36, 10.23, 24.77, false, 23, 14, 2, 17.35, 1.68, 11.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 3, 'AXM479', 25.08, 7.07, 26.30, false, 17, 13, 2, 14.37, 2.12, 11.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 7, 'AXM479', 27.47, 7.79, 27.04, false, 3, 8, 0, 11.76, 2.76, 6.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 11, 'AXM479', 27.57, 7.09, 26.67, false, 15, 13, 2, 11.17, 2.43, 6.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 15, 'AXM479', 28.55, 7.60, 26.72, false, 36, 20, 4, 18.21, 2.04, 15.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 19, 'AXM479', 29.21, 8.04, 27.27, false, 13, 11, 3, 19.35, 2.52, 13.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 12, 'AXM480', 24.90, 10.09, 24.21, false, 7, 6, 1, 14.73, 1.76, 2.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 14, 'AXM478', 26.97, 9.56, 24.88, false, 20, 11, 1, 10.17, 2.62, 5.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 18, 'AXM478', 26.07, 10.43, 26.13, false, 14, 10, 3, 18.51, 1.97, 9.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 2, 'AXM478', 28.49, 8.37, 27.13, false, 35, 18, 6, 9.45, 2.10, 3.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 6, 'AXM478', 27.51, 8.12, 27.27, false, 9, 3, 3, 12.41, 2.79, 4.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 10, 'AXM478', 25.84, 7.47, 26.38, false, 2, 2, 0, 14.52, 1.97, 4.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 14, 'AXM478', 30.34, 8.66, 27.43, false, 10, 13, 2, 13.68, 1.76, 6.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 18, 'AXM478', 28.67, 8.70, 26.29, false, 15, 8, 2, 8.74, 2.40, 6.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 2, 'AXM478', 25.69, 8.10, 26.67, false, 45, 5, 3, 9.27, 1.92, 7.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 16, 'AXM480', 26.95, 10.19, 25.18, false, 22, 11, 2, 11.30, 2.34, 4.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 20, 'AXM480', 26.27, 9.55, 25.52, false, 31, 20, 6, 8.36, 2.29, 8.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 4, 'AXM480', 28.02, 8.94, 26.09, false, 6, 5, 2, 16.40, 2.59, 14.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 8, 'AXM480', 26.49, 8.14, 27.17, false, 30, 20, 2, 16.61, 2.21, 2.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 12, 'AXM480', 29.58, 7.90, 26.45, false, 14, 16, 2, 15.61, 2.40, 5.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 16, 'AXM480', 28.67, 8.84, 26.50, false, 12, 20, 2, 7.81, 2.45, 2.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 20, 'AXM480', 28.86, 7.12, 26.32, false, 8, 11, 1, 7.44, 2.57, 2.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 4, 'AXM480', 29.49, 8.12, 27.13, false, 9, 10, 0, 7.26, 2.78, 5.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 7, 'AXM479', 27.08, 8.63, 26.65, false, 2, 2, 2, 16.40, 2.67, 9.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 11, 'AXM479', 26.49, 7.76, 27.25, false, 13, 12, 1, 16.23, 2.39, 7.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 15, 'AXM479', 27.88, 8.94, 26.70, false, 31, 18, 5, 18.70, 2.78, 18.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 19, 'AXM479', 28.73, 8.17, 26.86, false, 7, 9, 1, 10.12, 2.15, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 3, 'AXM479', 30.64, 7.47, 26.41, false, 42, 16, 1, 14.32, 2.34, 13.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 7, 'AXM479', 26.50, 8.90, 27.56, false, 3, 2, 1, 15.56, 2.13, 2.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 11, 'AXM479', 30.61, 8.32, 26.15, false, 2, 13, 1, 16.26, 1.77, 6.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 15, 'AXM479', 28.69, 8.25, 26.74, false, 33, 18, 3, 17.38, 1.74, 3.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 19, 'AXM479', 27.64, 7.47, 27.00, false, 24, 15, 2, 17.35, 2.05, 11.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 8, 'AXM480', 28.28, 7.58, 26.16, false, 6, 11, 2, 18.42, 2.49, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 6, 'AXM478', 26.94, 8.26, 26.28, false, 32, 18, 4, 19.02, 2.39, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 10, 'AXM478', 28.55, 7.28, 26.04, false, 12, 15, 2, 8.19, 2.72, 5.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 14, 'AXM478', 28.23, 7.88, 26.31, false, 5, 8, 2, 15.01, 2.06, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 18, 'AXM478', 27.63, 7.55, 26.43, false, 34, 18, 2, 14.47, 2.42, 11.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 2, 'AXM478', 29.72, 7.99, 26.29, false, 25, 8, 4, 9.52, 2.34, 3.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 6, 'AXM478', 26.98, 7.53, 26.73, false, 12, 14, 2, 13.82, 1.96, 3.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 10, 'AXM478', 30.35, 8.07, 26.27, false, 23, 20, 3, 13.69, 2.49, 5.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 14, 'AXM478', 30.82, 8.18, 26.60, false, 22, 12, 2, 10.27, 2.63, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 18, 'AXM478', 27.85, 8.15, 27.35, false, 14, 10, 4, 18.64, 2.34, 9.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 12, 'AXM480', 27.93, 7.60, 26.65, false, 7, 7, 3, 17.53, 1.72, 1.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 16, 'AXM480', 28.27, 8.99, 26.20, false, 2, 4, 1, 10.70, 1.98, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 20, 'AXM480', 29.09, 7.07, 26.28, false, 8, 15, 3, 16.91, 2.53, 7.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 4, 'AXM480', 31.17, 7.85, 27.28, false, 20, 17, 4, 17.30, 2.56, 15.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 8, 'AXM480', 29.69, 8.51, 26.15, false, 15, 9, 2, 10.01, 2.88, 7.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 12, 'AXM480', 26.60, 7.60, 27.07, false, 7, 7, 2, 14.88, 1.88, 2.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 16, 'AXM480', 28.32, 7.43, 27.08, false, 23, 11, 3, 11.43, 2.37, 4.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 20, 'AXM480', 28.13, 8.44, 27.03, false, 32, 20, 7, 8.51, 2.33, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 3, 'AXM479', 28.50, 0.50, 22.14, false, 17, 14, 3, 14.37, 2.13, 11.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 7, 'AXM479', 27.54, 0.49, 22.32, false, 4, 9, 0, 11.90, 2.89, 6.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 11, 'AXM479', 29.97, 0.50, 22.36, false, 17, 14, 2, 11.27, 2.44, 6.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 15, 'AXM479', 32.53, 0.53, 22.30, false, 38, 20, 4, 18.25, 2.25, 15.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 19, 'AXM479', 30.55, 0.50, 22.41, false, 13, 12, 4, 19.55, 2.63, 13.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 3, 'AXM479', 32.04, 0.50, 22.06, false, 29, 18, 6, 14.31, 2.73, 4.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 7, 'AXM479', 28.30, 0.50, 22.02, false, 4, 3, 3, 16.59, 2.94, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 11, 'AXM479', 26.56, 0.49, 22.04, false, 15, 13, 2, 16.38, 2.42, 7.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 15, 'AXM479', 28.13, 0.48, 22.44, false, 33, 18, 5, 18.81, 3.05, 18.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 19, 'AXM479', 32.37, 0.47, 22.29, false, 7, 10, 1, 10.13, 2.18, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 3, 'AXM479', 32.17, 0.48, 22.12, false, 44, 16, 2, 14.37, 2.74, 13.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 7, 'AXM479', 27.73, 0.53, 22.39, false, 5, 3, 1, 15.74, 2.33, 2.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 11, 'AXM479', 33.51, 0.53, 22.34, false, 2, 13, 2, 16.32, 1.78, 6.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 15, 'AXM479', 29.20, 0.49, 22.18, false, 34, 19, 3, 17.53, 2.08, 3.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 19, 'AXM479', 30.04, 0.50, 22.16, false, 25, 15, 3, 17.47, 2.42, 11.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 4, 'AXM480', 28.53, 0.50, 22.44, false, 8, 6, 3, 16.55, 2.77, 14.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 2, 'AXM478', 29.31, 0.52, 22.04, false, 37, 19, 6, 9.55, 2.31, 4.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 6, 'AXM478', 30.78, 0.50, 22.46, false, 10, 4, 4, 12.50, 2.89, 4.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 10, 'AXM478', 28.92, 0.53, 22.22, false, 4, 2, 0, 14.69, 2.36, 4.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 14, 'AXM478', 31.60, 0.50, 22.02, false, 10, 14, 2, 13.84, 1.82, 6.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 18, 'AXM478', 30.93, 0.48, 22.13, false, 17, 9, 3, 8.93, 2.45, 6.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 2, 'AXM478', 27.66, 0.51, 22.08, false, 45, 6, 4, 9.35, 2.31, 7.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 6, 'AXM478', 30.75, 0.49, 22.37, false, 33, 18, 5, 19.02, 2.50, 8.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 10, 'AXM478', 31.09, 0.51, 22.21, false, 14, 16, 2, 8.35, 2.91, 5.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 14, 'AXM478', 29.44, 0.48, 22.43, false, 5, 8, 3, 15.06, 2.41, 14.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 18, 'AXM478', 30.94, 0.47, 22.13, false, 34, 19, 2, 14.56, 2.57, 11.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 2, 'AXM478', 32.38, 0.50, 22.02, false, 25, 9, 4, 9.71, 2.59, 3.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 6, 'AXM478', 30.70, 0.51, 22.50, false, 14, 15, 3, 13.83, 2.21, 3.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 10, 'AXM478', 30.48, 0.50, 22.40, false, 23, 20, 3, 13.78, 2.54, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 14, 'AXM478', 33.62, 0.51, 22.47, false, 22, 13, 2, 10.29, 2.63, 5.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 18, 'AXM478', 29.78, 0.52, 22.25, false, 16, 11, 5, 18.83, 2.53, 9.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 8, 'AXM480', 27.64, 0.50, 22.36, false, 31, 20, 2, 16.77, 2.42, 2.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 12, 'AXM480', 32.17, 0.48, 22.34, false, 14, 16, 2, 15.62, 2.72, 5.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 16, 'AXM480', 31.76, 0.49, 22.08, false, 12, 20, 3, 7.90, 2.53, 2.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 20, 'AXM480', 31.28, 0.48, 22.21, false, 9, 12, 1, 7.64, 2.63, 2.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 4, 'AXM480', 30.36, 0.49, 22.45, false, 9, 10, 1, 7.37, 3.03, 5.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 8, 'AXM480', 30.65, 0.49, 22.01, false, 6, 12, 3, 18.51, 2.73, 6.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 12, 'AXM480', 31.68, 0.51, 22.03, false, 8, 7, 4, 17.54, 1.86, 1.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 16, 'AXM480', 30.60, 0.50, 22.49, false, 2, 4, 2, 10.87, 1.98, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 20, 'AXM480', 32.09, 0.49, 22.08, false, 8, 15, 3, 16.91, 2.57, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 4, 'AXM480', 34.09, 0.51, 22.25, false, 21, 18, 5, 17.49, 2.77, 15.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 8, 'AXM480', 31.47, 0.51, 22.14, false, 17, 9, 2, 10.15, 3.14, 7.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 12, 'AXM480', 26.93, 0.51, 22.21, false, 7, 8, 3, 15.07, 1.89, 2.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 16, 'AXM480', 29.29, 0.52, 22.17, false, 23, 12, 3, 11.54, 2.71, 4.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 20, 'AXM480', 29.28, 0.51, 22.40, false, 34, 20, 7, 8.52, 2.58, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 3, 'AXM479', 23.94, 0.99, 20.28, false, 12, 6, 0, 14.20, 2.01, 7.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 7, 'AXM479', 24.36, 1.00, 20.26, false, 16, 20, 2, 11.22, 1.98, 4.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 11, 'AXM479', 23.73, 1.00, 21.94, false, 2, 12, 0, 7.62, 1.82, 5.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 15, 'AXM479', 24.18, 0.99, 21.34, false, 12, 13, 1, 13.33, 2.49, 5.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 19, 'AXM479', 24.29, 1.00, 20.85, false, 7, 8, 0, 18.89, 2.42, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 3, 'AXM479', 23.62, 1.03, 21.57, false, 52, 19, 7, 14.20, 1.67, 9.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 7, 'AXM479', 24.05, 0.98, 21.53, false, 1, 3, 0, 7.80, 2.18, 4.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 11, 'AXM479', 24.24, 0.99, 20.31, false, 5, 11, 1, 7.41, 2.44, 6.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 15, 'AXM479', 24.44, 1.02, 21.18, false, 8, 4, 1, 12.48, 2.41, 11.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 19, 'AXM479', 24.20, 1.01, 20.45, false, 8, 5, 2, 18.34, 2.23, 13.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 3, 'AXM479', 23.60, 1.00, 20.38, false, 28, 13, 5, 14.20, 1.67, 12.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 7, 'AXM479', 24.39, 1.02, 21.37, false, 9, 7, 1, 9.26, 1.60, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 3, 'AXM479', 24.03, 10.11, 24.54, false, 52, 20, 7, 14.22, 2.04, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 2, 'AXM478', 23.56, 1.00, 20.53, false, 12, 16, 2, 9.20, 1.63, 5.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 6, 'AXM478', 23.95, 1.00, 21.06, false, 1, 1, 0, 16.01, 1.68, 9.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 10, 'AXM478', 24.07, 1.02, 21.42, false, 20, 10, 3, 8.26, 1.97, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 14, 'AXM478', 24.45, 0.99, 21.22, false, 8, 7, 1, 11.85, 2.28, 10.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 18, 'AXM478', 23.82, 1.03, 20.78, false, 5, 8, 1, 8.30, 2.09, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 2, 'AXM478', 23.56, 0.97, 21.26, false, 25, 3, 1, 9.20, 1.59, 1.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 6, 'AXM478', 24.06, 0.99, 21.20, false, 21, 19, 4, 17.70, 2.45, 6.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 10, 'AXM478', 23.55, 0.98, 21.23, false, 4, 5, 0, 19.87, 2.28, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 14, 'AXM478', 23.92, 1.00, 20.76, false, 10, 15, 0, 8.03, 2.43, 6.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 18, 'AXM478', 24.14, 1.00, 21.22, false, 5, 4, 0, 11.43, 2.11, 6.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 2, 'AXM478', 24.11, 0.99, 20.74, false, 38, 20, 3, 9.20, 2.23, 8.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 6, 'AXM478', 24.03, 1.00, 21.06, false, 20, 11, 1, 12.88, 1.87, 12.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 4, 'AXM480', 23.84, 0.98, 21.27, false, 33, 19, 4, 10.91, 2.30, 2.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 8, 'AXM480', 23.73, 1.01, 20.62, false, 23, 13, 2, 7.41, 2.06, 2.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 12, 'AXM480', 23.74, 1.02, 21.37, false, 33, 20, 2, 16.64, 1.53, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 16, 'AXM480', 24.32, 0.97, 20.14, false, 19, 19, 3, 8.79, 2.00, 7.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 20, 'AXM480', 23.59, 1.01, 20.33, false, 1, 19, 0, 9.17, 1.52, 7.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 4, 'AXM480', 23.63, 0.97, 21.82, false, 0, 2, 0, 9.72, 1.94, 3.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 8, 'AXM480', 23.58, 1.00, 20.81, false, 20, 19, 2, 8.97, 1.72, 4.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 12, 'AXM480', 23.69, 0.98, 21.60, false, 3, 11, 1, 8.43, 1.86, 5.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 16, 'AXM480', 23.85, 1.02, 21.50, false, 10, 7, 2, 11.72, 2.25, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 20, 'AXM480', 23.53, 1.01, 20.90, false, 9, 7, 0, 7.97, 2.09, 4.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 4, 'AXM480', 23.80, 0.98, 21.01, false, 1, 1, 0, 9.66, 1.77, 2.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 11, 'AXM479', 24.39, 0.99, 21.47, false, 0, 3, 0, 19.84, 2.07, 9.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 15, 'AXM479', 23.85, 1.00, 20.70, false, 4, 14, 1, 10.21, 1.98, 2.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 19, 'AXM479', 24.23, 0.99, 21.86, false, 4, 19, 1, 19.53, 2.21, 4.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 3, 'AXM479', 26.98, 10.11, 25.04, false, 14, 7, 1, 14.26, 2.15, 7.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 7, 'AXM479', 25.91, 10.25, 24.05, false, 16, 20, 2, 11.24, 1.98, 4.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 11, 'AXM479', 24.69, 10.44, 24.02, false, 3, 12, 0, 7.65, 1.85, 5.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 15, 'AXM479', 27.34, 9.78, 25.26, false, 12, 13, 2, 13.38, 2.50, 5.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 19, 'AXM479', 27.36, 10.32, 24.46, false, 8, 8, 0, 19.03, 2.74, 4.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 12, 'AXM480', 23.87, 0.98, 20.07, false, 1, 4, 0, 19.10, 1.69, 2.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 14, 'AXM478', 23.64, 0.99, 20.84, false, 11, 6, 1, 19.11, 1.96, 4.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 18, 'AXM478', 24.25, 0.97, 20.57, false, 6, 12, 0, 8.00, 2.29, 6.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 2, 'AXM478', 26.31, 9.97, 25.34, false, 12, 16, 3, 9.33, 1.67, 5.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 6, 'AXM478', 26.00, 9.87, 25.03, false, 2, 1, 1, 16.08, 1.79, 9.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 10, 'AXM478', 25.19, 9.83, 24.19, false, 20, 10, 3, 8.32, 2.23, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 14, 'AXM478', 28.28, 10.04, 24.38, false, 9, 8, 1, 11.91, 2.52, 10.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 18, 'AXM478', 26.88, 9.78, 25.87, false, 5, 9, 2, 8.48, 2.25, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 2, 'AXM478', 25.18, 10.44, 24.70, false, 25, 4, 1, 9.30, 1.68, 1.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 16, 'AXM480', 24.45, 1.03, 21.50, false, 9, 11, 1, 12.42, 2.28, 8.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 20, 'AXM480', 23.51, 1.01, 20.88, false, 0, 0, 0, 10.18, 1.72, 5.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 4, 'AXM480', 26.36, 9.86, 25.38, false, 34, 20, 5, 10.99, 2.59, 2.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 8, 'AXM480', 23.78, 9.80, 25.39, false, 25, 14, 3, 7.42, 2.08, 2.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 12, 'AXM480', 24.78, 10.26, 26.00, false, 33, 20, 3, 16.81, 1.83, 7.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 16, 'AXM480', 27.38, 9.89, 24.44, false, 19, 19, 3, 8.84, 2.28, 7.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 20, 'AXM480', 24.35, 9.71, 24.93, false, 2, 19, 0, 9.25, 1.63, 7.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 4, 'AXM480', 25.38, 10.43, 24.28, false, 2, 2, 0, 9.83, 2.21, 3.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 7, 'AXM479', 24.06, 10.44, 24.92, false, 1, 3, 0, 7.98, 2.25, 4.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 11, 'AXM479', 28.04, 10.44, 24.91, false, 6, 12, 1, 7.55, 2.44, 6.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 15, 'AXM479', 27.18, 10.21, 24.91, false, 9, 5, 1, 12.62, 2.81, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 19, 'AXM479', 24.93, 9.56, 24.68, false, 9, 5, 2, 18.49, 2.53, 13.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 3, 'AXM479', 26.96, 9.98, 24.62, false, 28, 13, 6, 14.38, 1.80, 12.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 7, 'AXM479', 25.99, 10.11, 25.05, false, 9, 7, 1, 9.36, 1.86, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 11, 'AXM479', 26.16, 10.04, 24.24, false, 2, 3, 0, 20.02, 2.21, 9.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 15, 'AXM479', 27.01, 10.26, 25.58, false, 5, 15, 2, 10.29, 2.26, 2.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 19, 'AXM479', 28.22, 9.77, 24.20, false, 6, 20, 2, 19.66, 2.59, 4.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 8, 'AXM480', 26.23, 9.92, 24.50, false, 20, 19, 2, 9.03, 1.84, 4.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 6, 'AXM478', 26.13, 9.62, 25.23, false, 21, 20, 4, 17.80, 2.84, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 10, 'AXM478', 25.91, 9.96, 24.35, false, 4, 6, 0, 20.00, 2.65, 5.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 14, 'AXM478', 27.87, 9.54, 24.57, false, 11, 15, 1, 8.22, 2.75, 6.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 18, 'AXM478', 25.61, 10.23, 24.28, false, 7, 4, 0, 11.45, 2.16, 6.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 2, 'AXM478', 26.02, 9.58, 25.71, false, 39, 20, 4, 9.27, 2.36, 8.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 6, 'AXM478', 27.24, 10.11, 25.65, false, 21, 12, 2, 13.00, 2.12, 12.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 10, 'AXM478', 26.01, 10.08, 25.45, false, 14, 11, 3, 9.28, 1.75, 2.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 14, 'AXM478', 26.15, 9.70, 25.50, false, 11, 7, 2, 19.29, 2.25, 4.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 18, 'AXM478', 24.84, 10.15, 25.19, false, 8, 13, 1, 8.06, 2.33, 6.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 12, 'AXM480', 24.08, 9.52, 25.29, false, 5, 11, 2, 8.46, 2.19, 5.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 16, 'AXM480', 25.39, 9.98, 24.04, false, 10, 7, 3, 11.86, 2.59, 5.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 20, 'AXM480', 24.07, 10.11, 24.15, false, 10, 8, 1, 8.02, 2.24, 4.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 4, 'AXM480', 25.39, 9.52, 25.61, false, 1, 1, 0, 9.76, 1.89, 2.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 8, 'AXM480', 24.78, 10.23, 26.02, false, 3, 12, 0, 9.76, 2.02, 4.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 12, 'AXM480', 23.95, 10.23, 24.64, false, 2, 5, 1, 19.13, 2.05, 2.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 16, 'AXM480', 26.01, 9.71, 25.85, false, 9, 12, 1, 12.43, 2.62, 8.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 20, 'AXM480', 26.00, 9.95, 25.04, false, 0, 0, 1, 10.24, 1.96, 5.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 3, 'AXM479', 29.52, 8.64, 26.24, false, 14, 7, 2, 14.34, 2.49, 7.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 7, 'AXM479', 28.99, 8.11, 26.89, false, 17, 20, 2, 11.29, 2.27, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 11, 'AXM479', 25.20, 8.28, 26.11, false, 5, 12, 0, 7.77, 1.86, 5.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 15, 'AXM479', 29.08, 8.65, 27.28, false, 13, 14, 3, 13.54, 2.80, 5.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 19, 'AXM479', 28.97, 7.53, 26.15, false, 8, 8, 1, 19.20, 2.91, 4.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 3, 'AXM479', 24.99, 8.69, 26.60, false, 53, 20, 8, 14.27, 2.06, 9.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 7, 'AXM479', 25.59, 8.92, 27.13, false, 2, 4, 0, 8.06, 2.40, 4.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 11, 'AXM479', 30.49, 8.89, 26.90, false, 8, 13, 2, 7.70, 2.77, 6.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 15, 'AXM479', 27.97, 8.18, 26.86, false, 11, 6, 2, 12.75, 3.01, 11.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 19, 'AXM479', 26.77, 8.91, 27.08, false, 11, 6, 2, 18.67, 2.89, 13.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 3, 'AXM479', 28.21, 8.26, 26.74, false, 29, 13, 6, 14.50, 2.20, 12.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 7, 'AXM479', 27.57, 7.04, 26.03, false, 10, 7, 1, 9.47, 2.26, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 11, 'AXM479', 27.57, 8.96, 26.33, false, 2, 3, 1, 20.11, 2.42, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 15, 'AXM479', 29.36, 8.64, 26.39, false, 7, 16, 2, 10.45, 2.63, 2.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 19, 'AXM479', 32.21, 8.67, 26.55, false, 6, 20, 3, 19.68, 2.77, 4.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 4, 'AXM480', 27.51, 8.56, 26.15, false, 34, 20, 5, 11.10, 2.91, 2.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 2, 'AXM478', 29.33, 7.20, 26.71, false, 12, 17, 4, 9.44, 2.05, 5.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 6, 'AXM478', 28.00, 8.93, 26.81, false, 2, 1, 2, 16.28, 1.92, 9.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 10, 'AXM478', 27.24, 7.82, 26.85, false, 22, 10, 4, 8.41, 2.49, 7.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 14, 'AXM478', 29.78, 7.17, 26.90, false, 9, 9, 1, 12.01, 2.81, 10.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 18, 'AXM478', 29.23, 8.20, 27.40, false, 7, 10, 2, 8.58, 2.55, 5.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 2, 'AXM478', 27.46, 8.42, 26.18, false, 25, 4, 1, 9.45, 1.84, 1.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 6, 'AXM478', 27.02, 8.54, 26.57, false, 23, 20, 4, 17.82, 2.96, 6.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 10, 'AXM478', 28.40, 7.75, 26.05, false, 6, 7, 0, 20.16, 3.02, 5.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 14, 'AXM478', 29.13, 7.92, 26.38, false, 12, 16, 1, 8.29, 3.09, 6.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 18, 'AXM478', 27.96, 8.14, 26.80, false, 8, 5, 1, 11.54, 2.26, 6.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 2, 'AXM478', 28.85, 7.20, 27.14, false, 39, 20, 5, 9.33, 2.56, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 6, 'AXM478', 30.73, 8.91, 26.23, false, 21, 13, 2, 13.20, 2.32, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 10, 'AXM478', 26.44, 7.42, 26.01, false, 14, 12, 4, 9.32, 1.83, 2.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 14, 'AXM478', 27.84, 7.06, 26.72, false, 11, 8, 3, 19.29, 2.31, 4.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 18, 'AXM478', 25.73, 8.12, 26.17, false, 9, 14, 2, 8.17, 2.38, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 8, 'AXM480', 25.95, 8.52, 27.41, false, 27, 15, 3, 7.49, 2.14, 2.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 12, 'AXM480', 26.96, 7.62, 26.66, false, 35, 20, 4, 16.90, 2.20, 7.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 16, 'AXM480', 30.54, 8.69, 27.14, false, 20, 20, 3, 9.03, 2.52, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 20, 'AXM480', 26.66, 8.74, 27.69, false, 4, 20, 1, 9.32, 1.74, 7.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 4, 'AXM480', 25.76, 7.58, 26.36, false, 3, 3, 0, 10.00, 2.53, 3.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 8, 'AXM480', 26.62, 7.39, 26.06, false, 20, 20, 2, 9.11, 1.85, 4.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 12, 'AXM480', 26.14, 8.05, 26.64, false, 6, 11, 3, 8.59, 2.26, 5.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 16, 'AXM480', 25.47, 8.06, 27.01, false, 10, 7, 3, 11.88, 2.61, 5.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 20, 'AXM480', 26.97, 7.18, 26.25, false, 10, 9, 1, 8.19, 2.28, 4.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 4, 'AXM480', 25.75, 7.80, 26.31, false, 2, 1, 1, 9.92, 2.27, 2.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 8, 'AXM480', 28.66, 7.80, 26.40, false, 5, 13, 1, 9.79, 2.13, 4.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 12, 'AXM480', 24.82, 8.65, 26.78, false, 4, 5, 2, 19.32, 2.09, 3.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 16, 'AXM480', 28.74, 8.90, 26.72, false, 11, 12, 2, 12.58, 2.73, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 20, 'AXM480', 28.77, 7.83, 26.81, false, 2, 1, 1, 10.42, 2.23, 5.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 3, 'AXM479', 31.95, 0.48, 22.15, false, 15, 8, 3, 14.46, 2.70, 8.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 7, 'AXM479', 30.70, 0.50, 22.43, false, 19, 20, 2, 11.37, 2.51, 4.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 11, 'AXM479', 28.53, 0.51, 22.35, false, 6, 13, 1, 7.93, 2.00, 5.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 15, 'AXM479', 29.44, 0.52, 22.06, false, 15, 14, 3, 13.69, 2.81, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 19, 'AXM479', 29.88, 0.52, 22.04, false, 10, 8, 1, 19.40, 3.18, 4.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 3, 'AXM479', 26.11, 0.48, 22.38, false, 54, 20, 9, 14.28, 2.31, 9.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 7, 'AXM479', 26.14, 0.49, 22.32, false, 3, 5, 0, 8.23, 2.56, 4.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 11, 'AXM479', 33.03, 0.50, 22.36, false, 9, 14, 3, 7.88, 2.99, 6.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 15, 'AXM479', 30.35, 0.48, 22.10, false, 13, 7, 2, 12.90, 3.37, 11.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 19, 'AXM479', 27.35, 0.52, 22.28, false, 11, 7, 3, 18.67, 2.98, 13.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 3, 'AXM479', 28.60, 0.51, 22.19, false, 29, 14, 7, 14.60, 2.31, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 7, 'AXM479', 28.70, 0.51, 22.08, false, 11, 8, 1, 9.59, 2.44, 4.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 3, 'AXM479', 24.01, 0.98, 21.63, false, 58, 17, 0, 13.32, 4.48, 7.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 2, 'AXM478', 33.18, 0.48, 22.02, false, 14, 17, 5, 9.55, 2.20, 5.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 6, 'AXM478', 30.63, 0.49, 22.45, false, 2, 2, 2, 16.31, 2.00, 9.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 10, 'AXM478', 27.68, 0.52, 22.31, false, 22, 10, 4, 8.60, 2.69, 7.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 14, 'AXM478', 29.89, 0.53, 22.10, false, 9, 10, 1, 12.01, 2.93, 10.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 18, 'AXM478', 30.29, 0.47, 22.09, false, 8, 11, 2, 8.67, 2.92, 5.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 2, 'AXM478', 28.78, 0.51, 22.37, false, 25, 5, 2, 9.53, 2.01, 2.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 6, 'AXM478', 30.28, 0.52, 22.53, false, 25, 20, 5, 17.90, 3.02, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 10, 'AXM478', 32.13, 0.51, 22.31, false, 8, 8, 1, 20.18, 3.38, 5.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 14, 'AXM478', 29.51, 0.47, 22.32, false, 12, 16, 2, 8.45, 3.33, 6.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 18, 'AXM478', 29.37, 0.52, 22.06, false, 8, 6, 1, 11.72, 2.62, 6.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 2, 'AXM478', 32.15, 0.51, 22.32, false, 40, 20, 5, 9.35, 2.75, 9.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 6, 'AXM478', 33.20, 0.49, 22.13, false, 22, 14, 3, 13.33, 2.53, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 4, 'AXM480', 30.41, 0.52, 22.02, false, 35, 20, 5, 11.25, 3.11, 3.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 8, 'AXM480', 28.26, 0.51, 22.40, false, 27, 16, 3, 7.54, 2.48, 2.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 12, 'AXM480', 30.24, 0.52, 22.17, false, 36, 20, 4, 16.97, 2.41, 7.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 16, 'AXM480', 31.49, 0.49, 22.32, false, 20, 20, 3, 9.10, 2.71, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 20, 'AXM480', 29.57, 0.52, 22.42, false, 4, 20, 1, 9.39, 1.87, 7.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 4, 'AXM480', 27.95, 0.49, 22.40, false, 4, 3, 0, 10.07, 2.78, 3.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 8, 'AXM480', 29.91, 0.51, 22.40, false, 22, 20, 3, 9.15, 2.05, 4.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 12, 'AXM480', 26.60, 0.51, 22.48, false, 7, 12, 4, 8.75, 2.40, 5.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 16, 'AXM480', 26.76, 0.51, 22.44, false, 12, 7, 3, 11.93, 2.94, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 20, 'AXM480', 30.51, 0.52, 22.15, false, 12, 9, 2, 8.26, 2.42, 4.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 4, 'AXM480', 26.48, 0.51, 22.05, false, 2, 2, 1, 9.94, 2.56, 2.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 11, 'AXM479', 30.49, 0.48, 22.33, false, 4, 4, 1, 20.26, 2.55, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 15, 'AXM479', 32.70, 0.52, 22.01, false, 9, 16, 3, 10.49, 2.65, 2.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 19, 'AXM479', 33.48, 0.51, 22.26, false, 8, 20, 3, 19.86, 2.92, 4.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 3, 'AXM479', 24.27, 1.00, 20.73, false, 41, 20, 1, 18.34, 3.75, 6.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 7, 'AXM479', 23.53, 1.02, 20.02, false, 42, 12, 2, 11.85, 3.72, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 11, 'AXM479', 23.64, 1.03, 21.54, false, 71, 20, 11, 12.60, 3.82, 5.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 15, 'AXM479', 23.59, 1.03, 21.12, false, 17, 5, 1, 16.20, 4.23, 14.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 19, 'AXM479', 24.10, 1.00, 21.42, false, 28, 9, 4, 14.89, 4.24, 8.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 12, 'AXM480', 25.12, 0.49, 22.47, false, 6, 5, 3, 19.41, 2.25, 3.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 14, 'AXM478', 28.62, 0.47, 22.24, false, 12, 8, 3, 19.39, 2.31, 4.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 18, 'AXM478', 26.71, 0.52, 22.09, false, 9, 15, 2, 8.32, 2.70, 6.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 2, 'AXM478', 23.52, 0.99, 20.09, false, 68, 18, 10, 20.04, 3.61, 5.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 6, 'AXM478', 23.79, 1.02, 21.46, false, 43, 17, 3, 13.44, 3.84, 11.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 10, 'AXM478', 23.74, 1.03, 21.59, false, 48, 14, 8, 13.40, 3.64, 9.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 14, 'AXM478', 23.94, 0.97, 20.44, false, 45, 15, 4, 18.27, 4.22, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 18, 'AXM478', 24.01, 1.00, 20.89, false, 40, 19, 8, 16.87, 4.19, 5.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 2, 'AXM478', 24.28, 1.02, 21.40, false, 56, 16, 1, 21.81, 3.78, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 16, 'AXM480', 30.32, 0.47, 22.38, false, 12, 13, 3, 12.74, 2.78, 8.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 20, 'AXM480', 32.52, 0.50, 22.36, false, 2, 1, 2, 10.45, 2.28, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 4, 'AXM480', 23.59, 0.98, 21.81, false, 71, 20, 11, 18.17, 3.60, 5.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 8, 'AXM480', 23.55, 1.01, 21.85, false, 42, 20, 2, 17.56, 4.25, 11.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 12, 'AXM480', 23.53, 0.98, 20.46, false, 55, 14, 2, 21.10, 3.61, 17.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 16, 'AXM480', 23.52, 1.01, 21.97, false, 20, 8, 2, 11.86, 3.53, 10.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 20, 'AXM480', 23.51, 1.02, 21.29, false, 15, 4, 1, 16.11, 4.35, 15.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 4, 'AXM480', 23.62, 0.98, 20.17, false, 50, 14, 5, 9.16, 3.71, 6.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 7, 'AXM479', 24.19, 0.99, 20.59, false, 13, 5, 0, 13.05, 3.86, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 11, 'AXM479', 24.48, 0.97, 21.43, false, 19, 5, 2, 21.13, 4.04, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 15, 'AXM479', 23.67, 1.01, 20.00, false, 28, 11, 4, 10.17, 4.08, 10.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 19, 'AXM479', 23.75, 1.02, 21.17, false, 49, 13, 8, 18.17, 4.49, 17.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 3, 'AXM479', 23.92, 1.01, 20.55, false, 29, 10, 5, 19.46, 3.52, 6.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 7, 'AXM479', 23.60, 0.97, 21.27, false, 22, 9, 0, 10.72, 4.46, 4.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 11, 'AXM479', 23.71, 1.01, 21.98, false, 33, 13, 3, 12.05, 3.56, 11.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 15, 'AXM479', 24.13, 0.98, 21.91, false, 19, 5, 2, 17.63, 3.63, 17.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 19, 'AXM479', 24.32, 1.01, 20.66, false, 12, 4, 2, 21.51, 3.97, 14.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 8, 'AXM480', 23.92, 1.02, 20.72, false, 27, 9, 5, 9.69, 3.63, 3.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 6, 'AXM478', 24.01, 1.00, 20.41, false, 10, 5, 1, 12.19, 4.10, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 10, 'AXM478', 24.08, 1.00, 20.37, false, 50, 14, 9, 13.22, 3.78, 9.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 14, 'AXM478', 24.17, 1.00, 21.24, false, 17, 5, 1, 20.08, 3.93, 8.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 18, 'AXM478', 24.41, 0.99, 21.56, false, 47, 20, 4, 21.55, 4.47, 13.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 2, 'AXM478', 24.11, 1.00, 21.38, false, 51, 16, 7, 21.08, 4.48, 18.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 6, 'AXM478', 24.02, 0.99, 20.42, false, 40, 20, 6, 20.30, 3.56, 9.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 10, 'AXM478', 24.23, 1.00, 20.90, false, 38, 17, 5, 20.66, 3.99, 10.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 14, 'AXM478', 23.62, 1.00, 21.53, false, 57, 18, 3, 17.74, 4.44, 8.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 18, 'AXM478', 23.73, 1.00, 21.90, false, 64, 20, 1, 9.41, 4.38, 4.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 12, 'AXM480', 23.91, 1.00, 20.30, false, 17, 5, 3, 12.44, 4.32, 11.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 16, 'AXM480', 24.32, 1.00, 20.63, false, 57, 20, 10, 9.48, 4.45, 7.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 20, 'AXM480', 23.83, 1.02, 20.53, false, 41, 14, 7, 9.08, 4.13, 7.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 4, 'AXM480', 24.13, 1.02, 20.71, false, 71, 20, 8, 19.35, 3.51, 17.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 8, 'AXM480', 23.61, 1.00, 20.41, false, 31, 13, 5, 14.11, 3.91, 12.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 12, 'AXM480', 23.86, 1.01, 20.76, false, 42, 19, 3, 19.12, 4.13, 7.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 16, 'AXM480', 23.60, 0.99, 20.76, false, 46, 13, 9, 12.69, 4.10, 5.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 20, 'AXM480', 24.10, 1.02, 20.45, false, 61, 20, 7, 19.24, 4.32, 4.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 3, 'AXM479', 24.88, 9.53, 24.93, false, 42, 20, 2, 18.52, 3.79, 6.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 7, 'AXM479', 24.62, 9.85, 25.47, false, 44, 13, 2, 11.96, 3.81, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 11, 'AXM479', 26.30, 10.26, 24.31, false, 73, 20, 12, 12.73, 3.85, 5.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 15, 'AXM479', 25.76, 9.91, 25.00, false, 19, 6, 1, 16.22, 4.27, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 19, 'AXM479', 26.23, 9.84, 25.26, false, 30, 10, 4, 15.06, 4.58, 8.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 3, 'AXM479', 26.28, 10.34, 25.83, false, 58, 17, 0, 13.34, 4.77, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 7, 'AXM479', 25.05, 10.27, 24.77, false, 14, 6, 0, 13.24, 4.12, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 11, 'AXM479', 26.72, 9.55, 25.13, false, 19, 6, 3, 21.28, 4.34, 5.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 15, 'AXM479', 25.70, 9.84, 25.51, false, 29, 11, 5, 10.36, 4.09, 10.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 19, 'AXM479', 27.35, 10.23, 25.46, false, 49, 14, 8, 18.20, 4.74, 17.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 3, 'AXM479', 24.21, 9.91, 24.02, false, 31, 10, 5, 19.60, 3.73, 6.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 7, 'AXM479', 24.96, 10.26, 25.83, false, 22, 9, 0, 10.88, 4.49, 4.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 11, 'AXM479', 27.25, 10.33, 24.56, false, 35, 14, 3, 12.10, 3.82, 11.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 15, 'AXM479', 27.51, 10.32, 25.89, false, 20, 5, 3, 17.78, 3.94, 17.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 19, 'AXM479', 25.94, 9.78, 25.54, false, 13, 4, 2, 21.65, 4.28, 14.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 4, 'AXM480', 24.03, 9.98, 25.34, false, 72, 20, 11, 18.19, 3.87, 5.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 2, 'AXM478', 27.41, 10.07, 24.49, false, 68, 18, 11, 20.11, 3.98, 6.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 6, 'AXM478', 25.34, 9.55, 25.52, false, 43, 17, 4, 13.56, 4.21, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 10, 'AXM478', 23.93, 9.64, 25.75, false, 49, 15, 9, 13.46, 3.85, 9.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 14, 'AXM478', 27.69, 9.54, 25.76, false, 45, 16, 5, 18.44, 4.40, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 18, 'AXM478', 25.70, 10.39, 24.58, false, 40, 20, 8, 16.97, 4.23, 5.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 2, 'AXM478', 25.55, 10.09, 25.54, false, 56, 17, 2, 22.01, 4.06, 15.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 6, 'AXM478', 25.66, 9.64, 24.01, false, 11, 6, 1, 12.32, 4.24, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 10, 'AXM478', 25.47, 10.44, 25.31, false, 50, 15, 9, 13.29, 3.89, 9.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 14, 'AXM478', 25.91, 9.59, 24.66, false, 18, 6, 1, 20.13, 4.28, 8.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 18, 'AXM478', 24.72, 10.25, 24.80, false, 48, 20, 4, 21.60, 4.58, 13.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 2, 'AXM478', 25.20, 9.74, 25.42, false, 53, 17, 7, 21.13, 4.50, 18.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 6, 'AXM478', 25.42, 9.72, 25.36, false, 42, 20, 6, 20.33, 3.90, 9.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 10, 'AXM478', 24.33, 9.79, 25.27, false, 40, 18, 6, 20.73, 4.09, 10.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 14, 'AXM478', 23.81, 10.38, 24.35, false, 57, 18, 4, 17.78, 4.56, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 18, 'AXM478', 24.58, 10.36, 25.78, false, 65, 20, 1, 9.42, 4.54, 4.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 8, 'AXM480', 25.99, 9.67, 24.19, false, 42, 20, 3, 17.74, 4.29, 11.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 12, 'AXM480', 26.47, 10.01, 24.36, false, 56, 15, 3, 21.23, 3.83, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 16, 'AXM480', 27.17, 9.82, 24.08, false, 20, 9, 3, 11.93, 3.62, 10.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 20, 'AXM480', 26.81, 10.44, 25.59, false, 17, 5, 2, 16.29, 4.75, 15.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 4, 'AXM480', 24.26, 10.30, 24.74, false, 51, 14, 6, 9.33, 3.77, 6.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 8, 'AXM480', 24.38, 9.90, 25.88, false, 27, 9, 5, 9.86, 3.86, 4.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 12, 'AXM480', 24.35, 10.49, 24.06, false, 19, 5, 4, 12.57, 4.41, 11.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 16, 'AXM480', 25.75, 10.30, 24.50, false, 58, 20, 10, 9.61, 4.57, 7.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 20, 'AXM480', 26.93, 10.46, 25.07, false, 41, 14, 7, 9.17, 4.28, 7.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 4, 'AXM480', 28.08, 10.29, 25.83, false, 72, 20, 9, 19.54, 3.67, 17.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 8, 'AXM480', 27.40, 10.06, 25.22, false, 31, 13, 6, 14.30, 4.09, 12.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 12, 'AXM480', 26.41, 9.54, 25.17, false, 42, 19, 3, 19.31, 4.49, 7.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 16, 'AXM480', 24.69, 10.03, 25.24, false, 46, 14, 10, 12.86, 4.46, 5.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 20, 'AXM480', 27.85, 10.38, 25.09, false, 63, 20, 8, 19.32, 4.51, 4.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 3, 'AXM479', 27.17, 8.33, 26.37, false, 44, 20, 2, 18.55, 3.82, 6.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 7, 'AXM479', 26.02, 8.40, 26.54, false, 46, 14, 3, 12.13, 4.18, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 11, 'AXM479', 27.41, 8.00, 26.59, false, 75, 20, 13, 12.82, 4.13, 5.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 15, 'AXM479', 26.91, 8.93, 26.52, false, 19, 7, 2, 16.35, 4.64, 14.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 19, 'AXM479', 28.02, 7.73, 26.71, false, 32, 11, 5, 15.18, 4.60, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 3, 'AXM479', 29.36, 8.50, 27.28, false, 58, 18, 0, 13.44, 4.82, 7.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 7, 'AXM479', 28.26, 7.06, 26.77, false, 14, 7, 0, 13.26, 4.21, 11.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 11, 'AXM479', 27.97, 7.08, 27.10, false, 19, 6, 3, 21.33, 4.73, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 15, 'AXM479', 25.75, 8.83, 26.26, false, 30, 11, 5, 10.44, 4.45, 10.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 19, 'AXM479', 30.98, 7.06, 26.88, false, 50, 14, 8, 18.31, 4.93, 17.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 3, 'AXM479', 24.45, 7.80, 26.23, false, 33, 10, 5, 19.72, 3.80, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 7, 'AXM479', 25.67, 8.27, 26.34, false, 24, 10, 0, 11.00, 4.87, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 3, 'AXM479', 31.27, 0.52, 22.10, false, 58, 19, 0, 13.53, 5.18, 7.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 2, 'AXM478', 28.41, 7.10, 26.82, false, 70, 18, 11, 20.22, 4.23, 6.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 6, 'AXM478', 29.09, 8.63, 26.35, false, 43, 18, 5, 13.67, 4.30, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 10, 'AXM478', 27.59, 8.78, 27.55, false, 51, 16, 9, 13.58, 4.06, 9.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 14, 'AXM478', 28.36, 8.76, 26.63, false, 46, 17, 5, 18.47, 4.68, 16.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 18, 'AXM478', 28.25, 7.87, 26.75, false, 40, 20, 8, 17.11, 4.24, 5.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 2, 'AXM478', 25.81, 8.02, 26.86, false, 58, 17, 2, 22.14, 4.13, 15.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 6, 'AXM478', 26.88, 8.54, 27.21, false, 13, 6, 1, 12.38, 4.26, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 10, 'AXM478', 25.63, 7.28, 26.45, false, 51, 15, 9, 13.44, 4.13, 9.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 14, 'AXM478', 26.64, 8.51, 26.88, false, 19, 7, 2, 20.32, 4.28, 8.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 18, 'AXM478', 26.11, 8.93, 26.82, false, 50, 20, 5, 21.68, 4.94, 13.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 2, 'AXM478', 28.81, 7.23, 26.57, false, 53, 17, 8, 21.27, 4.81, 18.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 6, 'AXM478', 27.12, 7.85, 26.77, false, 43, 20, 6, 20.53, 4.07, 9.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 4, 'AXM480', 27.91, 8.19, 26.27, false, 72, 20, 12, 18.35, 4.21, 5.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 8, 'AXM480', 26.74, 7.49, 26.57, false, 44, 20, 3, 17.85, 4.30, 11.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 12, 'AXM480', 29.34, 7.38, 27.17, false, 58, 15, 3, 21.31, 3.99, 17.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 16, 'AXM480', 30.89, 7.47, 27.06, false, 21, 9, 4, 12.04, 3.86, 10.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 20, 'AXM480', 27.45, 7.38, 26.20, false, 18, 5, 2, 16.32, 4.92, 15.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 4, 'AXM480', 26.69, 8.55, 26.53, false, 53, 14, 6, 9.37, 3.81, 6.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 8, 'AXM480', 25.59, 8.62, 26.13, false, 29, 9, 5, 9.94, 3.88, 4.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 12, 'AXM480', 25.21, 7.51, 26.10, false, 19, 6, 4, 12.64, 4.65, 11.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 16, 'AXM480', 27.51, 7.50, 26.28, false, 60, 20, 11, 9.78, 4.92, 7.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 20, 'AXM480', 27.68, 8.05, 27.26, false, 42, 14, 8, 9.33, 4.45, 7.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 4, 'AXM480', 31.59, 7.63, 27.06, false, 74, 20, 10, 19.54, 3.69, 18.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 11, 'AXM479', 29.08, 7.07, 26.61, false, 36, 14, 4, 12.14, 4.21, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 15, 'AXM479', 27.89, 7.75, 26.40, false, 20, 6, 4, 17.91, 4.22, 17.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 19, 'AXM479', 29.30, 8.14, 27.40, false, 13, 5, 3, 21.70, 4.47, 14.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 3, 'AXM479', 29.58, 0.48, 22.27, false, 45, 20, 2, 18.67, 4.17, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 7, 'AXM479', 26.79, 0.52, 22.15, false, 47, 14, 3, 12.33, 4.50, 4.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 11, 'AXM479', 29.97, 0.51, 22.07, false, 77, 20, 14, 12.98, 4.37, 5.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 15, 'AXM479', 28.95, 0.51, 22.18, false, 21, 7, 2, 16.47, 4.93, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 19, 'AXM479', 29.81, 0.50, 22.23, false, 34, 11, 6, 15.27, 4.86, 9.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 12, 'AXM480', 29.89, 8.67, 27.21, false, 42, 20, 4, 19.50, 4.69, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 14, 'AXM478', 26.62, 7.48, 26.95, false, 59, 19, 4, 17.97, 4.85, 8.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 18, 'AXM478', 28.04, 8.19, 26.89, false, 67, 20, 1, 9.49, 4.87, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 2, 'AXM478', 31.80, 0.51, 22.33, false, 70, 19, 12, 20.37, 4.26, 6.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 6, 'AXM478', 30.73, 0.51, 22.17, false, 43, 19, 5, 13.74, 4.68, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 10, 'AXM478', 28.00, 0.50, 22.40, false, 53, 16, 9, 13.62, 4.26, 9.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 14, 'AXM478', 29.20, 0.50, 22.49, false, 48, 17, 6, 18.53, 4.90, 16.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 18, 'AXM478', 30.83, 0.52, 22.24, false, 40, 20, 8, 17.15, 4.63, 5.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 2, 'AXM478', 28.10, 0.51, 22.49, false, 58, 18, 2, 22.33, 4.42, 15.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 16, 'AXM480', 28.52, 8.43, 26.91, false, 47, 14, 10, 13.04, 4.77, 5.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 20, 'AXM480', 28.80, 8.02, 26.08, false, 63, 20, 9, 19.35, 4.78, 4.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 4, 'AXM480', 28.54, 0.47, 22.41, false, 74, 20, 13, 18.44, 4.43, 5.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 8, 'AXM480', 28.05, 0.49, 22.41, false, 46, 20, 4, 17.96, 4.62, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 12, 'AXM480', 30.55, 0.50, 22.16, false, 60, 16, 3, 21.35, 4.35, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 16, 'AXM480', 31.43, 0.48, 22.17, false, 23, 9, 5, 12.17, 3.93, 10.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 20, 'AXM480', 28.40, 0.53, 22.17, false, 19, 5, 2, 16.49, 5.02, 15.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 4, 'AXM480', 28.02, 0.50, 22.24, false, 55, 14, 6, 9.50, 4.12, 6.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 7, 'AXM479', 28.79, 0.48, 22.08, false, 14, 8, 1, 13.32, 4.39, 11.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 11, 'AXM479', 28.88, 0.50, 22.43, false, 21, 7, 4, 21.38, 5.11, 5.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 15, 'AXM479', 29.68, 0.52, 22.48, false, 30, 11, 5, 10.58, 4.52, 10.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 19, 'AXM479', 34.58, 0.52, 22.07, false, 51, 14, 8, 18.48, 5.15, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 3, 'AXM479', 27.09, 0.48, 22.30, false, 35, 10, 5, 19.86, 3.89, 6.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 7, 'AXM479', 28.43, 0.47, 22.26, false, 24, 11, 1, 11.10, 5.11, 5.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 11, 'AXM479', 30.65, 0.51, 22.09, false, 38, 15, 4, 12.19, 4.52, 11.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 15, 'AXM479', 29.69, 0.50, 22.09, false, 21, 6, 4, 17.93, 4.45, 17.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 19, 'AXM479', 31.70, 0.50, 22.31, false, 15, 5, 4, 21.81, 4.86, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 8, 'AXM480', 25.61, 0.51, 22.22, false, 31, 10, 6, 9.96, 4.06, 4.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 6, 'AXM478', 30.39, 0.52, 22.00, false, 15, 6, 1, 12.47, 4.47, 11.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 10, 'AXM478', 27.85, 0.51, 22.29, false, 52, 15, 10, 13.60, 4.15, 9.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 14, 'AXM478', 29.28, 0.52, 22.30, false, 19, 8, 2, 20.33, 4.38, 8.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 18, 'AXM478', 27.37, 0.49, 22.00, false, 51, 20, 6, 21.79, 5.16, 13.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 2, 'AXM478', 30.41, 0.51, 22.06, false, 55, 17, 8, 21.38, 4.93, 18.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 6, 'AXM478', 28.59, 0.52, 22.43, false, 44, 20, 7, 20.69, 4.32, 9.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 10, 'AXM478', 24.67, 0.51, 22.04, false, 42, 20, 6, 21.00, 4.44, 10.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 14, 'AXM478', 26.96, 0.49, 22.08, false, 59, 19, 5, 17.98, 5.14, 9.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 18, 'AXM478', 29.00, 0.50, 22.16, false, 67, 20, 1, 9.64, 5.06, 5.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 12, 'AXM480', 28.05, 0.50, 22.29, false, 20, 6, 4, 12.68, 4.88, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 16, 'AXM480', 28.41, 0.50, 22.04, false, 60, 20, 11, 9.81, 4.99, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 20, 'AXM480', 31.37, 0.50, 22.43, false, 42, 15, 9, 9.38, 4.78, 7.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 4, 'AXM480', 35.39, 0.53, 22.16, false, 75, 20, 11, 19.63, 4.01, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 8, 'AXM480', 27.71, 0.52, 22.36, false, 32, 13, 7, 14.68, 4.45, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 12, 'AXM480', 31.39, 0.50, 22.31, false, 44, 20, 4, 19.68, 5.04, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 16, 'AXM480', 30.75, 0.51, 22.43, false, 49, 15, 10, 13.05, 4.92, 5.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 20, 'AXM480', 31.46, 0.47, 22.34, false, 65, 20, 10, 19.48, 4.90, 4.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 3, 'AXM479', 24.05, 1.03, 20.11, false, 66, 20, 11, 18.07, 5.67, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 7, 'AXM479', 24.31, 1.03, 20.08, false, 44, 9, 3, 15.02, 5.92, 11.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 11, 'AXM479', 24.09, 0.99, 21.12, false, 53, 11, 2, 14.72, 6.15, 9.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 15, 'AXM479', 24.14, 1.02, 21.97, false, 51, 13, 2, 16.02, 6.44, 10.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 19, 'AXM479', 24.12, 0.98, 21.09, false, 70, 17, 3, 17.96, 6.42, 8.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 3, 'AXM479', 24.39, 0.97, 21.87, false, 32, 7, 6, 15.85, 6.14, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 7, 'AXM479', 24.09, 1.03, 20.27, false, 65, 20, 7, 19.56, 5.81, 7.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 11, 'AXM479', 23.83, 0.98, 21.12, false, 69, 17, 12, 20.45, 6.45, 14.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 15, 'AXM479', 24.47, 1.03, 20.72, false, 36, 9, 6, 18.22, 5.70, 10.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 19, 'AXM479', 24.47, 1.01, 20.96, false, 89, 20, 4, 12.16, 6.00, 11.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 3, 'AXM479', 23.70, 1.03, 22.10, false, 86, 20, 12, 11.19, 6.26, 8.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 7, 'AXM479', 23.98, 0.97, 21.02, false, 32, 8, 3, 21.01, 6.16, 11.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 11, 'AXM479', 24.02, 0.99, 21.85, false, 75, 16, 11, 12.18, 5.62, 7.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 15, 'AXM479', 23.81, 0.99, 21.28, false, 80, 16, 1, 20.10, 5.60, 12.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 19, 'AXM479', 23.57, 0.97, 20.61, false, 75, 20, 7, 12.67, 6.35, 6.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 4, 'AXM480', 24.25, 0.98, 20.07, false, 83, 20, 9, 12.38, 5.55, 9.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 2, 'AXM478', 23.94, 1.01, 21.52, false, 22, 7, 5, 16.07, 5.68, 15.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 6, 'AXM478', 23.75, 1.02, 21.84, false, 86, 20, 7, 16.70, 5.69, 7.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 10, 'AXM478', 23.93, 0.99, 21.67, false, 82, 20, 6, 20.82, 6.18, 9.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 14, 'AXM478', 23.57, 1.02, 21.70, false, 41, 11, 7, 15.11, 5.55, 6.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 18, 'AXM478', 23.53, 0.98, 20.69, false, 61, 20, 4, 19.21, 6.09, 12.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 2, 'AXM478', 24.39, 0.98, 21.67, false, 68, 20, 13, 12.63, 6.44, 6.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 6, 'AXM478', 24.47, 1.02, 20.74, false, 48, 12, 2, 12.61, 5.61, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 10, 'AXM478', 23.57, 1.01, 21.23, false, 82, 20, 3, 14.84, 5.73, 14.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 14, 'AXM478', 24.24, 0.97, 20.68, false, 43, 10, 9, 22.53, 5.68, 13.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 18, 'AXM478', 24.16, 1.00, 21.77, false, 51, 11, 2, 18.04, 5.94, 15.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 2, 'AXM478', 24.07, 0.98, 20.64, false, 36, 11, 3, 19.29, 5.82, 6.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 6, 'AXM478', 23.90, 1.02, 20.61, false, 96, 20, 14, 18.39, 5.59, 17.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 10, 'AXM478', 24.18, 0.98, 21.49, false, 54, 11, 5, 18.56, 5.95, 15.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 14, 'AXM478', 23.50, 1.01, 20.84, false, 80, 17, 2, 14.41, 6.21, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 18, 'AXM478', 23.60, 1.02, 21.19, false, 29, 8, 3, 13.59, 6.16, 8.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 8, 'AXM480', 24.40, 0.98, 20.82, false, 29, 7, 3, 11.97, 6.30, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 12, 'AXM480', 23.85, 1.01, 21.02, false, 62, 20, 2, 21.89, 6.38, 10.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 16, 'AXM480', 24.08, 1.03, 20.98, false, 61, 14, 11, 16.64, 5.66, 8.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 20, 'AXM480', 23.62, 1.01, 20.15, false, 39, 8, 5, 13.43, 6.06, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 4, 'AXM480', 24.19, 1.02, 21.27, false, 50, 13, 4, 19.46, 5.82, 14.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 8, 'AXM480', 24.16, 0.98, 20.81, false, 45, 15, 5, 12.32, 6.29, 9.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 12, 'AXM480', 23.82, 0.98, 21.11, false, 49, 12, 4, 21.61, 6.20, 16.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 16, 'AXM480', 23.89, 0.99, 21.35, false, 54, 15, 11, 19.04, 6.26, 10.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 20, 'AXM480', 24.12, 0.98, 21.66, false, 52, 11, 8, 12.83, 6.04, 9.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 4, 'AXM480', 23.74, 1.03, 21.37, false, 34, 9, 2, 12.64, 5.91, 6.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 8, 'AXM480', 23.71, 0.99, 20.70, false, 82, 20, 14, 16.48, 5.57, 9.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 12, 'AXM480', 24.43, 1.02, 22.00, false, 44, 11, 8, 17.87, 6.46, 9.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 16, 'AXM480', 24.48, 1.02, 21.44, false, 49, 14, 5, 14.73, 5.78, 5.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 20, 'AXM480', 23.72, 1.01, 21.37, false, 53, 12, 3, 20.64, 5.66, 9.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 3, 'AXM479', 25.92, 9.69, 25.40, false, 67, 20, 11, 18.19, 5.69, 15.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 7, 'AXM479', 27.39, 10.35, 24.97, false, 44, 10, 3, 15.03, 6.24, 11.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 11, 'AXM479', 27.24, 10.36, 26.02, false, 54, 12, 2, 14.81, 6.22, 9.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 15, 'AXM479', 27.02, 10.16, 24.15, false, 52, 14, 3, 16.18, 6.72, 10.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 19, 'AXM479', 25.76, 10.18, 24.40, false, 71, 18, 3, 18.08, 6.75, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 3, 'AXM479', 27.94, 9.56, 24.88, false, 34, 7, 6, 16.00, 6.52, 7.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 7, 'AXM479', 25.20, 10.08, 24.85, false, 65, 20, 7, 19.73, 6.02, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 11, 'AXM479', 24.18, 9.69, 25.79, false, 70, 17, 12, 20.60, 6.61, 14.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 15, 'AXM479', 28.11, 9.77, 25.13, false, 36, 10, 7, 18.37, 6.04, 10.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 19, 'AXM479', 24.88, 10.21, 25.21, false, 91, 20, 4, 12.30, 6.19, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 3, 'AXM479', 26.41, 10.00, 24.16, false, 86, 20, 13, 11.22, 6.37, 8.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 7, 'AXM479', 24.80, 10.05, 24.69, false, 34, 9, 3, 21.07, 6.24, 11.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 3, 'AXM479', 30.58, 9.00, 26.89, false, 34, 7, 6, 16.19, 6.89, 7.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 2, 'AXM478', 24.15, 9.86, 25.13, false, 24, 7, 5, 16.09, 5.77, 15.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 6, 'AXM478', 24.66, 10.22, 25.14, false, 88, 20, 8, 16.76, 5.92, 7.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 10, 'AXM478', 27.33, 10.09, 25.09, false, 84, 20, 6, 20.87, 6.24, 9.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 14, 'AXM478', 26.54, 9.99, 25.36, false, 43, 12, 8, 15.14, 5.65, 6.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 18, 'AXM478', 24.14, 10.00, 25.52, false, 62, 20, 5, 19.22, 6.36, 12.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 2, 'AXM478', 25.74, 9.70, 24.01, false, 69, 20, 13, 12.82, 6.76, 6.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 6, 'AXM478', 27.37, 9.56, 25.54, false, 49, 12, 3, 12.66, 5.78, 11.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 10, 'AXM478', 24.43, 10.09, 25.34, false, 83, 20, 4, 14.93, 5.85, 14.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 14, 'AXM478', 26.62, 9.92, 25.52, false, 43, 11, 10, 22.55, 5.69, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 18, 'AXM478', 27.09, 10.10, 24.65, false, 53, 12, 3, 18.19, 5.95, 16.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 2, 'AXM478', 26.08, 9.62, 25.38, false, 36, 12, 4, 19.36, 5.89, 6.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 6, 'AXM478', 27.18, 9.68, 25.03, false, 96, 20, 15, 18.54, 5.79, 17.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 4, 'AXM480', 24.46, 9.63, 25.65, false, 84, 20, 9, 12.45, 5.59, 9.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 8, 'AXM480', 27.08, 10.48, 24.51, false, 29, 8, 3, 12.10, 6.64, 7.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 12, 'AXM480', 25.71, 10.02, 25.43, false, 63, 20, 2, 22.01, 6.47, 10.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 16, 'AXM480', 24.56, 9.58, 25.59, false, 63, 14, 11, 16.70, 5.79, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 20, 'AXM480', 27.08, 9.57, 24.91, false, 40, 8, 6, 13.49, 6.41, 11.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 4, 'AXM480', 24.58, 10.06, 25.36, false, 50, 13, 5, 19.49, 5.97, 14.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 8, 'AXM480', 24.47, 9.75, 25.87, false, 46, 16, 6, 12.33, 6.56, 9.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 12, 'AXM480', 26.45, 9.69, 25.52, false, 51, 13, 5, 21.65, 6.26, 16.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 16, 'AXM480', 25.91, 10.28, 24.91, false, 55, 16, 11, 19.08, 6.55, 10.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 20, 'AXM480', 27.57, 10.35, 25.93, false, 53, 11, 8, 12.93, 6.21, 9.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 4, 'AXM480', 26.34, 10.17, 26.02, false, 36, 9, 2, 12.79, 6.13, 6.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 11, 'AXM479', 25.67, 10.43, 25.02, false, 77, 16, 11, 12.26, 5.72, 8.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 15, 'AXM479', 27.55, 9.95, 24.03, false, 80, 16, 1, 20.16, 5.88, 12.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 19, 'AXM479', 25.78, 10.44, 25.24, false, 77, 20, 7, 12.75, 6.53, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 3, 'AXM479', 27.41, 7.04, 26.15, false, 69, 20, 11, 18.30, 6.04, 15.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 7, 'AXM479', 27.65, 7.65, 26.59, false, 44, 10, 4, 15.05, 6.38, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 11, 'AXM479', 28.43, 8.48, 26.20, false, 54, 13, 2, 14.91, 6.61, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 15, 'AXM479', 30.35, 7.82, 26.97, false, 54, 14, 3, 16.30, 6.83, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 19, 'AXM479', 28.17, 8.56, 26.84, false, 71, 19, 3, 18.22, 6.83, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 12, 'AXM480', 25.31, 9.66, 25.29, false, 46, 11, 9, 18.00, 6.56, 9.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 14, 'AXM478', 25.90, 9.84, 25.19, false, 81, 18, 3, 14.49, 6.54, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 18, 'AXM478', 24.41, 9.52, 25.67, false, 29, 9, 3, 13.69, 6.41, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 2, 'AXM478', 27.10, 8.78, 27.26, false, 25, 7, 5, 16.13, 6.16, 15.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 6, 'AXM478', 24.93, 8.10, 26.64, false, 88, 20, 8, 16.77, 6.12, 7.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 10, 'AXM478', 28.45, 8.90, 27.10, false, 86, 20, 6, 20.91, 6.35, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 14, 'AXM478', 27.19, 7.23, 26.48, false, 43, 13, 8, 15.17, 5.90, 6.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 18, 'AXM478', 25.87, 7.34, 26.20, false, 62, 20, 5, 19.30, 6.44, 12.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 2, 'AXM478', 28.66, 7.24, 26.74, false, 71, 20, 14, 12.99, 6.94, 6.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 16, 'AXM480', 28.00, 9.90, 25.51, false, 50, 15, 5, 14.88, 5.80, 5.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 20, 'AXM480', 25.76, 10.16, 25.64, false, 54, 13, 4, 20.73, 5.85, 9.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 4, 'AXM480', 26.70, 8.42, 26.95, false, 85, 20, 9, 12.46, 5.62, 9.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 8, 'AXM480', 30.38, 7.05, 26.82, false, 30, 9, 3, 12.16, 6.83, 7.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 12, 'AXM480', 28.64, 8.65, 26.13, false, 64, 20, 2, 22.19, 6.75, 10.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 16, 'AXM480', 25.01, 8.39, 27.20, false, 63, 14, 12, 16.78, 6.11, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 20, 'AXM480', 30.56, 7.00, 26.40, false, 41, 8, 7, 13.53, 6.69, 11.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 4, 'AXM480', 26.18, 8.63, 27.02, false, 51, 13, 5, 19.62, 6.06, 14.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 7, 'AXM479', 27.34, 8.76, 27.10, false, 65, 20, 7, 19.86, 6.22, 7.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 11, 'AXM479', 26.55, 7.68, 26.76, false, 70, 18, 12, 20.76, 6.82, 14.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 15, 'AXM479', 28.56, 7.14, 27.09, false, 38, 10, 8, 18.39, 6.30, 10.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 19, 'AXM479', 27.61, 8.55, 26.62, false, 91, 20, 5, 12.39, 6.24, 11.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 3, 'AXM479', 30.41, 7.85, 26.37, false, 88, 20, 13, 11.38, 6.41, 8.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 7, 'AXM479', 25.07, 8.76, 27.30, false, 34, 9, 3, 21.19, 6.25, 11.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 11, 'AXM479', 27.94, 7.37, 26.78, false, 77, 17, 11, 12.45, 6.04, 8.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 15, 'AXM479', 28.67, 8.10, 26.72, false, 81, 16, 1, 20.23, 5.92, 12.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 19, 'AXM479', 28.16, 8.01, 26.75, false, 78, 20, 7, 12.87, 6.84, 7.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 8, 'AXM480', 27.12, 7.68, 26.89, false, 46, 16, 7, 12.52, 6.56, 9.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 6, 'AXM478', 31.16, 9.00, 27.61, false, 51, 12, 4, 12.81, 6.03, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 10, 'AXM478', 25.30, 8.86, 26.77, false, 85, 20, 5, 15.05, 6.12, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 14, 'AXM478', 29.86, 7.86, 27.25, false, 45, 12, 10, 22.67, 6.00, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 18, 'AXM478', 29.51, 8.88, 27.74, false, 53, 12, 4, 18.37, 6.13, 16.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 2, 'AXM478', 26.95, 7.57, 26.05, false, 38, 13, 5, 19.46, 6.09, 6.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 6, 'AXM478', 30.37, 8.88, 27.34, false, 97, 20, 15, 18.67, 5.98, 17.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 10, 'AXM478', 31.35, 8.56, 27.14, false, 57, 12, 5, 18.77, 6.19, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 14, 'AXM478', 29.11, 8.27, 26.03, false, 82, 19, 4, 14.49, 6.60, 11.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 18, 'AXM478', 24.68, 8.18, 26.08, false, 30, 10, 3, 13.79, 6.73, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 12, 'AXM480', 28.84, 8.01, 26.48, false, 52, 13, 5, 21.69, 6.39, 17.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 16, 'AXM480', 27.87, 8.71, 26.57, false, 56, 16, 12, 19.21, 6.81, 10.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 20, 'AXM480', 28.63, 7.30, 26.41, false, 54, 11, 9, 13.10, 6.38, 10.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 4, 'AXM480', 29.87, 8.11, 26.70, false, 36, 10, 3, 12.90, 6.43, 6.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 8, 'AXM480', 27.38, 8.40, 27.15, false, 85, 20, 15, 16.61, 5.75, 9.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 12, 'AXM480', 28.47, 8.36, 26.10, false, 47, 12, 9, 18.16, 6.93, 9.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 16, 'AXM480', 29.96, 8.21, 26.76, false, 51, 16, 6, 14.94, 6.15, 6.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 20, 'AXM480', 27.31, 8.55, 26.81, false, 55, 13, 5, 20.90, 6.09, 9.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 3, 'AXM479', 31.33, 0.49, 22.31, false, 70, 20, 11, 18.37, 6.38, 15.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 7, 'AXM479', 29.51, 0.49, 22.01, false, 46, 10, 4, 15.10, 6.69, 11.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 11, 'AXM479', 28.78, 0.48, 22.29, false, 56, 14, 2, 14.99, 6.76, 10.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 15, 'AXM479', 33.63, 0.53, 22.01, false, 56, 14, 4, 16.33, 6.94, 10.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 19, 'AXM479', 30.56, 0.49, 22.24, false, 73, 19, 3, 18.23, 7.15, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 3, 'AXM479', 33.39, 0.51, 22.16, false, 34, 7, 6, 16.31, 6.90, 7.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 7, 'AXM479', 27.81, 0.47, 22.37, false, 65, 20, 8, 19.93, 6.58, 7.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 11, 'AXM479', 30.47, 0.48, 22.13, false, 72, 18, 12, 20.77, 7.18, 14.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 15, 'AXM479', 30.74, 0.52, 22.00, false, 38, 11, 8, 18.44, 6.47, 10.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 19, 'AXM479', 28.73, 0.52, 22.04, false, 93, 20, 6, 12.54, 6.25, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 3, 'AXM479', 30.62, 0.53, 22.33, false, 88, 20, 13, 11.54, 6.65, 8.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 7, 'AXM479', 26.44, 0.52, 22.28, false, 35, 10, 3, 21.26, 6.52, 11.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 11, 'AXM479', 30.62, 0.48, 22.35, false, 78, 18, 12, 12.47, 6.24, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 15, 'AXM479', 32.37, 0.50, 22.38, false, 82, 17, 1, 20.30, 6.08, 12.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 19, 'AXM479', 31.71, 0.51, 22.33, false, 78, 20, 8, 12.96, 7.02, 7.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 4, 'AXM480', 29.25, 0.49, 22.39, false, 85, 20, 10, 12.65, 6.01, 9.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 2, 'AXM478', 29.54, 0.52, 22.35, false, 26, 8, 6, 16.14, 6.55, 15.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 6, 'AXM478', 28.40, 0.51, 22.10, false, 89, 20, 9, 16.83, 6.41, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 10, 'AXM478', 29.19, 0.48, 22.09, false, 88, 20, 6, 20.95, 6.54, 10.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 14, 'AXM478', 30.13, 0.50, 22.09, false, 45, 13, 8, 15.34, 5.91, 6.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 18, 'AXM478', 28.13, 0.51, 22.26, false, 64, 20, 5, 19.37, 6.59, 12.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 2, 'AXM478', 30.31, 0.51, 22.13, false, 71, 20, 15, 13.00, 6.97, 7.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 6, 'AXM478', 33.32, 0.50, 22.08, false, 53, 12, 4, 12.88, 6.35, 11.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 10, 'AXM478', 27.84, 0.53, 22.32, false, 87, 20, 6, 15.25, 6.29, 14.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 14, 'AXM478', 30.37, 0.48, 22.36, false, 46, 12, 10, 22.74, 6.38, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 18, 'AXM478', 32.89, 0.49, 22.05, false, 54, 12, 5, 18.53, 6.41, 16.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 2, 'AXM478', 29.98, 0.48, 22.21, false, 39, 14, 6, 19.48, 6.25, 6.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 6, 'AXM478', 33.41, 0.51, 22.50, false, 98, 20, 16, 18.81, 6.33, 17.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 10, 'AXM478', 32.81, 0.50, 22.23, false, 58, 12, 6, 18.93, 6.49, 15.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 14, 'AXM478', 29.23, 0.47, 22.31, false, 84, 19, 5, 14.61, 6.73, 11.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 18, 'AXM478', 28.37, 0.51, 22.04, false, 30, 11, 4, 13.94, 7.11, 8.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 8, 'AXM480', 32.80, 0.53, 22.39, false, 31, 10, 4, 12.26, 7.14, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 12, 'AXM480', 31.40, 0.51, 22.20, false, 66, 20, 3, 22.19, 7.07, 10.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 16, 'AXM480', 26.19, 0.53, 22.38, false, 65, 15, 12, 16.94, 6.41, 8.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 20, 'AXM480', 32.39, 0.49, 22.18, false, 41, 8, 8, 13.71, 6.95, 11.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 4, 'AXM480', 28.33, 0.52, 22.37, false, 53, 14, 5, 19.78, 6.18, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 8, 'AXM480', 30.15, 0.50, 22.01, false, 47, 17, 8, 12.62, 6.59, 9.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 12, 'AXM480', 31.58, 0.50, 22.42, false, 54, 14, 6, 21.87, 6.45, 17.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 16, 'AXM480', 29.99, 0.50, 22.22, false, 57, 16, 13, 19.36, 6.87, 10.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 20, 'AXM480', 31.37, 0.49, 22.38, false, 55, 12, 10, 13.20, 6.39, 10.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 4, 'AXM480', 32.20, 0.49, 22.00, false, 36, 10, 3, 13.09, 6.54, 6.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 8, 'AXM480', 28.87, 0.51, 22.22, false, 85, 20, 16, 16.63, 6.00, 9.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 12, 'AXM480', 30.16, 0.47, 22.36, false, 49, 12, 10, 18.34, 7.07, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 16, 'AXM480', 31.24, 0.48, 22.38, false, 51, 17, 7, 14.99, 6.36, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 20, 'AXM480', 28.85, 0.52, 22.52, false, 57, 13, 5, 21.03, 6.33, 9.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 3, 'AXM479', 24.16, 0.97, 20.80, false, 109, 17, 13, 13.45, 7.98, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 7, 'AXM479', 24.14, 0.99, 20.65, false, 104, 18, 5, 22.51, 8.37, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 11, 'AXM479', 23.90, 0.99, 21.70, false, 105, 16, 9, 17.30, 7.90, 10.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 15, 'AXM479', 23.60, 1.01, 21.97, false, 48, 8, 3, 15.16, 7.69, 9.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 19, 'AXM479', 23.62, 0.97, 21.66, false, 139, 20, 5, 24.07, 7.63, 23.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 3, 'AXM479', 23.79, 0.97, 20.38, false, 122, 20, 22, 24.55, 8.23, 14.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 7, 'AXM479', 24.49, 1.01, 21.62, false, 126, 20, 19, 14.27, 7.80, 9.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 11, 'AXM479', 24.24, 0.99, 21.09, false, 47, 8, 3, 18.17, 8.10, 12.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 15, 'AXM479', 23.94, 1.00, 21.57, false, 133, 20, 6, 17.57, 8.41, 10.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 19, 'AXM479', 24.27, 1.00, 20.06, false, 67, 10, 6, 16.74, 7.88, 14.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 3, 'AXM479', 23.97, 0.97, 21.16, false, 113, 20, 15, 25.96, 8.16, 8.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 7, 'AXM479', 24.47, 1.02, 21.88, false, 117, 20, 18, 15.31, 8.48, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 2, 'AXM478', 24.38, 1.00, 20.47, false, 51, 9, 12, 25.21, 8.29, 21.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 6, 'AXM478', 24.49, 1.03, 21.06, false, 105, 18, 19, 14.05, 7.73, 9.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 10, 'AXM478', 23.91, 1.01, 20.53, false, 65, 11, 9, 24.53, 8.06, 9.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 14, 'AXM478', 24.30, 1.01, 21.30, false, 80, 12, 10, 19.08, 8.25, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 18, 'AXM478', 23.74, 1.03, 21.87, false, 121, 20, 20, 19.67, 7.61, 10.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 2, 'AXM478', 23.95, 1.00, 21.62, false, 43, 8, 6, 15.84, 7.82, 10.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 6, 'AXM478', 23.92, 0.98, 21.80, false, 116, 19, 18, 13.78, 7.94, 13.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 10, 'AXM478', 23.87, 0.98, 21.89, false, 115, 19, 16, 21.38, 8.27, 14.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 14, 'AXM478', 23.81, 1.00, 21.45, false, 116, 19, 3, 17.25, 8.15, 14.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 18, 'AXM478', 24.44, 1.00, 21.19, false, 57, 10, 3, 24.53, 8.49, 20.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 2, 'AXM478', 23.51, 1.03, 21.01, false, 138, 20, 19, 20.29, 7.66, 9.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 6, 'AXM478', 23.69, 0.99, 20.35, false, 130, 20, 9, 20.69, 8.36, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 4, 'AXM480', 24.28, 0.99, 21.38, false, 66, 10, 6, 22.52, 8.06, 16.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 8, 'AXM480', 24.18, 1.01, 20.24, false, 103, 16, 7, 20.04, 7.68, 18.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 12, 'AXM480', 23.63, 1.02, 21.42, false, 65, 10, 12, 16.70, 8.14, 15.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 16, 'AXM480', 24.09, 1.00, 21.11, false, 138, 20, 3, 16.94, 8.35, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 20, 'AXM480', 24.07, 0.99, 20.37, false, 59, 9, 12, 24.02, 7.55, 7.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 4, 'AXM480', 23.65, 0.98, 21.45, false, 121, 20, 11, 21.70, 7.50, 12.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 8, 'AXM480', 24.49, 0.98, 20.99, false, 101, 20, 19, 21.46, 8.28, 21.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 12, 'AXM480', 24.07, 0.98, 20.51, false, 84, 13, 6, 21.71, 7.82, 12.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 16, 'AXM480', 23.89, 1.02, 21.33, false, 74, 12, 13, 20.60, 7.56, 8.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 20, 'AXM480', 24.10, 0.98, 20.83, false, 124, 20, 11, 25.35, 8.02, 19.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 4, 'AXM480', 23.52, 0.99, 20.14, false, 54, 10, 6, 24.89, 7.59, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 11, 'AXM479', 24.22, 1.02, 20.73, false, 61, 11, 2, 14.69, 8.14, 11.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 15, 'AXM479', 24.30, 1.03, 21.48, false, 56, 11, 7, 22.95, 7.67, 20.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 19, 'AXM479', 24.03, 1.02, 20.68, false, 100, 16, 9, 24.32, 8.13, 15.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 3, 'AXM479', 26.46, 10.01, 24.95, false, 109, 17, 14, 13.51, 8.24, 11.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 7, 'AXM479', 27.63, 9.58, 25.41, false, 105, 19, 5, 22.56, 8.63, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 11, 'AXM479', 24.18, 9.71, 25.70, false, 107, 17, 10, 17.50, 8.08, 10.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 15, 'AXM479', 27.03, 10.36, 24.17, false, 50, 9, 3, 15.34, 7.87, 9.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 19, 'AXM479', 25.84, 10.42, 24.78, false, 141, 20, 5, 24.17, 7.70, 23.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 12, 'AXM480', 24.33, 1.03, 21.87, false, 56, 11, 7, 18.76, 8.36, 14.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 14, 'AXM478', 24.22, 0.98, 21.84, false, 140, 20, 22, 15.48, 7.79, 12.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 18, 'AXM478', 24.14, 1.02, 21.83, false, 103, 18, 10, 19.11, 7.93, 13.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 2, 'AXM478', 27.04, 10.39, 25.07, false, 52, 10, 12, 25.22, 8.57, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 6, 'AXM478', 25.93, 10.45, 25.31, false, 105, 19, 19, 14.15, 7.80, 9.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 10, 'AXM478', 23.94, 9.77, 25.79, false, 67, 12, 9, 24.66, 8.14, 9.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 14, 'AXM478', 26.01, 9.90, 25.04, false, 80, 12, 10, 19.26, 8.44, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 18, 'AXM478', 26.29, 10.00, 25.24, false, 121, 20, 20, 19.75, 7.77, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 2, 'AXM478', 26.53, 9.52, 25.77, false, 43, 9, 7, 15.95, 8.15, 10.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 16, 'AXM480', 24.40, 0.98, 21.27, false, 115, 20, 24, 23.09, 7.98, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 20, 'AXM480', 23.51, 1.01, 21.22, false, 61, 12, 9, 25.87, 7.69, 17.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 4, 'AXM480', 27.55, 9.66, 24.62, false, 67, 10, 6, 22.71, 8.43, 16.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 8, 'AXM480', 27.38, 10.46, 25.14, false, 105, 16, 7, 20.13, 8.08, 18.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 12, 'AXM480', 24.51, 9.63, 24.77, false, 66, 10, 12, 16.81, 8.37, 15.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 16, 'AXM480', 24.17, 10.17, 24.44, false, 139, 20, 4, 17.12, 8.54, 13.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 20, 'AXM480', 25.99, 9.79, 25.03, false, 61, 9, 13, 24.02, 7.75, 7.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 4, 'AXM480', 23.78, 10.05, 25.44, false, 122, 20, 12, 21.83, 7.72, 12.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 3, 'AXM479', 24.66, 10.05, 25.32, false, 122, 20, 22, 24.65, 8.58, 14.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 7, 'AXM479', 27.87, 10.19, 26.02, false, 126, 20, 19, 14.38, 8.19, 9.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 11, 'AXM479', 24.70, 9.63, 24.26, false, 49, 8, 4, 18.30, 8.37, 12.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 15, 'AXM479', 25.29, 10.43, 25.64, false, 133, 20, 7, 17.66, 8.65, 10.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 19, 'AXM479', 24.40, 9.78, 25.40, false, 69, 11, 7, 16.87, 8.09, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 3, 'AXM479', 25.29, 10.01, 24.76, false, 114, 20, 15, 26.02, 8.16, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 7, 'AXM479', 27.28, 10.07, 25.48, false, 117, 20, 18, 15.47, 8.57, 14.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 11, 'AXM479', 25.53, 9.82, 24.33, false, 63, 11, 3, 14.86, 8.17, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 15, 'AXM479', 25.70, 10.11, 25.95, false, 58, 11, 8, 22.96, 8.04, 20.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 19, 'AXM479', 27.33, 10.44, 26.17, false, 102, 16, 10, 24.36, 8.18, 15.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 8, 'AXM480', 26.37, 10.48, 24.56, false, 102, 20, 19, 21.49, 8.59, 21.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 6, 'AXM478', 24.05, 9.91, 25.77, false, 116, 19, 19, 13.93, 8.30, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 10, 'AXM478', 24.23, 9.89, 24.57, false, 115, 20, 17, 21.57, 8.60, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 14, 'AXM478', 26.72, 9.86, 24.99, false, 117, 19, 4, 17.26, 8.36, 14.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 18, 'AXM478', 25.31, 10.10, 24.91, false, 57, 11, 4, 24.54, 8.69, 20.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 2, 'AXM478', 25.60, 9.51, 24.15, false, 140, 20, 20, 20.37, 7.87, 9.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 6, 'AXM478', 26.37, 9.80, 24.19, false, 130, 20, 9, 20.72, 8.50, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 10, 'AXM478', 24.33, 10.29, 24.89, false, 120, 20, 6, 21.00, 8.19, 14.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 14, 'AXM478', 25.92, 10.31, 25.06, false, 142, 20, 22, 15.66, 7.86, 12.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 18, 'AXM478', 27.25, 10.40, 24.79, false, 103, 18, 11, 19.17, 8.05, 13.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 12, 'AXM480', 25.92, 9.87, 25.59, false, 85, 14, 6, 21.84, 7.96, 12.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 16, 'AXM480', 25.16, 9.68, 25.17, false, 75, 13, 14, 20.66, 7.89, 8.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 20, 'AXM480', 26.78, 10.37, 26.05, false, 126, 20, 11, 25.37, 8.36, 19.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 4, 'AXM480', 24.78, 10.49, 24.65, false, 55, 11, 7, 25.07, 7.89, 15.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 8, 'AXM480', 24.87, 10.34, 24.15, false, 104, 20, 4, 14.58, 8.70, 10.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 12, 'AXM480', 26.62, 10.43, 24.19, false, 57, 11, 8, 18.83, 8.47, 14.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 16, 'AXM480', 26.99, 9.90, 24.67, false, 115, 20, 24, 23.22, 8.20, 11.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 20, 'AXM480', 24.79, 9.51, 24.86, false, 63, 12, 10, 25.96, 7.82, 17.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 3, 'AXM479', 30.10, 8.18, 26.39, false, 110, 18, 15, 13.68, 8.45, 11.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 7, 'AXM479', 28.20, 8.44, 26.09, false, 105, 19, 6, 22.62, 8.88, 10.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 11, 'AXM479', 26.32, 8.99, 26.36, false, 109, 17, 11, 17.51, 8.28, 10.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 15, 'AXM479', 28.85, 7.97, 26.42, false, 50, 10, 3, 15.38, 8.11, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 19, 'AXM479', 29.06, 8.07, 26.31, false, 143, 20, 6, 24.26, 7.82, 23.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 3, 'AXM479', 25.75, 8.96, 27.02, false, 122, 20, 23, 24.74, 8.89, 14.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 7, 'AXM479', 29.42, 8.39, 27.27, false, 127, 20, 20, 14.51, 8.56, 9.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 11, 'AXM479', 27.37, 7.47, 26.37, false, 51, 9, 5, 18.42, 8.42, 12.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 15, 'AXM479', 28.57, 8.91, 26.15, false, 135, 20, 7, 17.69, 8.95, 10.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 19, 'AXM479', 27.30, 7.05, 26.02, false, 69, 12, 8, 16.90, 8.28, 14.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 3, 'AXM479', 27.14, 7.85, 26.41, false, 116, 20, 16, 26.22, 8.17, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 7, 'AXM479', 27.72, 8.45, 27.17, false, 119, 20, 18, 15.62, 8.58, 14.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 11, 'AXM479', 28.89, 7.37, 26.41, false, 64, 11, 4, 15.03, 8.35, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 15, 'AXM479', 28.71, 8.22, 26.56, false, 59, 11, 9, 23.05, 8.37, 20.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 19, 'AXM479', 30.32, 8.98, 26.17, false, 102, 17, 11, 24.41, 8.46, 15.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 4, 'AXM480', 28.25, 8.03, 26.98, false, 67, 10, 6, 22.79, 8.80, 16.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 2, 'AXM478', 30.89, 7.04, 26.33, false, 54, 11, 12, 25.27, 8.79, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 6, 'AXM478', 27.51, 8.01, 26.47, false, 107, 19, 20, 14.22, 7.92, 9.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 10, 'AXM478', 25.42, 8.62, 27.54, false, 69, 12, 9, 24.72, 8.38, 9.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 14, 'AXM478', 26.42, 7.91, 26.51, false, 81, 12, 11, 19.36, 8.81, 18.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 18, 'AXM478', 27.24, 7.36, 26.40, false, 122, 20, 20, 19.82, 7.89, 10.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 2, 'AXM478', 26.55, 7.52, 27.11, false, 45, 9, 7, 16.12, 8.21, 10.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 6, 'AXM478', 26.79, 8.18, 26.26, false, 117, 20, 19, 14.09, 8.54, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 10, 'AXM478', 27.84, 7.55, 27.13, false, 115, 20, 18, 21.66, 8.72, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 14, 'AXM478', 30.71, 7.49, 26.51, false, 119, 20, 4, 17.26, 8.72, 14.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 18, 'AXM478', 28.87, 7.48, 27.13, false, 59, 12, 5, 24.72, 9.04, 20.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 2, 'AXM478', 26.47, 8.38, 27.54, false, 140, 20, 21, 20.50, 8.24, 9.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 6, 'AXM478', 29.85, 8.21, 26.10, false, 130, 20, 10, 20.81, 8.90, 15.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 10, 'AXM478', 25.37, 8.04, 27.21, false, 122, 20, 7, 21.02, 8.49, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 14, 'AXM478', 28.40, 8.39, 26.17, false, 143, 20, 22, 15.75, 8.05, 12.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 18, 'AXM478', 29.82, 7.99, 26.37, false, 103, 18, 12, 19.33, 8.10, 13.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 8, 'AXM480', 31.06, 7.30, 26.51, false, 105, 17, 8, 20.32, 8.46, 18.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 12, 'AXM480', 28.47, 7.64, 27.00, false, 67, 10, 12, 16.87, 8.54, 15.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 16, 'AXM480', 27.68, 8.71, 26.40, false, 139, 20, 5, 17.23, 8.81, 13.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 20, 'AXM480', 27.95, 7.25, 26.01, false, 61, 10, 13, 24.03, 8.08, 8.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 4, 'AXM480', 26.54, 7.74, 26.67, false, 124, 20, 13, 21.97, 7.83, 12.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 8, 'AXM480', 26.47, 8.92, 26.36, false, 103, 20, 19, 21.52, 8.83, 21.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 12, 'AXM480', 29.21, 7.80, 26.51, false, 87, 14, 6, 21.99, 8.05, 12.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 16, 'AXM480', 25.47, 8.72, 26.45, false, 76, 14, 15, 20.75, 7.91, 8.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 20, 'AXM480', 26.96, 7.44, 26.12, false, 126, 20, 11, 25.56, 8.57, 19.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 4, 'AXM480', 28.51, 7.25, 26.55, false, 57, 11, 8, 25.15, 8.21, 15.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 8, 'AXM480', 28.81, 8.72, 27.13, false, 105, 20, 5, 14.72, 9.09, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 12, 'AXM480', 26.63, 8.83, 27.39, false, 58, 12, 9, 18.97, 8.66, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 16, 'AXM480', 30.32, 7.89, 27.14, false, 116, 20, 24, 23.41, 8.50, 12.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 20, 'AXM480', 26.33, 8.01, 27.32, false, 63, 12, 10, 26.13, 7.91, 17.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 3, 'AXM479', 32.91, 0.50, 22.42, false, 112, 19, 15, 13.80, 8.66, 11.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 7, 'AXM479', 28.62, 0.49, 22.45, false, 107, 19, 7, 22.80, 9.02, 10.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 11, 'AXM479', 28.55, 0.50, 22.32, false, 110, 18, 12, 17.65, 8.28, 10.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 15, 'AXM479', 29.59, 0.52, 22.03, false, 51, 10, 4, 15.53, 8.47, 9.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 19, 'AXM479', 29.07, 0.51, 22.44, false, 143, 20, 6, 24.38, 7.90, 24.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 3, 'AXM479', 26.45, 0.51, 22.17, false, 124, 20, 24, 24.89, 9.02, 14.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 7, 'AXM479', 31.65, 0.48, 22.23, false, 128, 20, 21, 14.67, 8.62, 9.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 11, 'AXM479', 30.42, 0.47, 22.30, false, 51, 10, 5, 18.56, 8.57, 12.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 15, 'AXM479', 31.81, 0.50, 22.21, false, 136, 20, 7, 17.85, 8.95, 10.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 19, 'AXM479', 31.09, 0.49, 22.45, false, 70, 12, 9, 17.01, 8.31, 14.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 3, 'AXM479', 30.07, 0.48, 22.05, false, 117, 20, 17, 26.26, 8.40, 8.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 7, 'AXM479', 30.62, 0.51, 22.50, false, 121, 20, 18, 15.67, 8.89, 14.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 2, 'AXM478', 32.57, 0.53, 22.28, false, 55, 11, 12, 25.32, 9.00, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 6, 'AXM478', 30.80, 0.49, 22.21, false, 109, 19, 21, 14.24, 8.00, 9.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 10, 'AXM478', 25.75, 0.52, 22.52, false, 71, 12, 10, 24.77, 8.55, 9.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 14, 'AXM478', 27.97, 0.50, 22.02, false, 83, 13, 11, 19.37, 8.86, 18.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 18, 'AXM478', 27.80, 0.49, 22.01, false, 123, 20, 21, 19.83, 7.91, 10.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 2, 'AXM478', 27.80, 0.50, 22.04, false, 47, 10, 7, 16.24, 8.44, 10.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 6, 'AXM478', 27.86, 0.50, 22.23, false, 118, 20, 19, 14.16, 8.62, 13.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 10, 'AXM478', 30.46, 0.51, 22.40, false, 116, 20, 19, 21.72, 8.78, 14.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 14, 'AXM478', 30.98, 0.48, 22.06, false, 120, 20, 4, 17.41, 8.76, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 18, 'AXM478', 30.10, 0.52, 22.53, false, 60, 12, 5, 24.72, 9.12, 20.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 2, 'AXM478', 26.49, 0.52, 22.21, false, 141, 20, 22, 20.68, 8.61, 9.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 6, 'AXM478', 32.92, 0.49, 22.02, false, 132, 20, 10, 20.95, 8.97, 15.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 4, 'AXM480', 29.03, 0.50, 22.47, false, 69, 11, 6, 22.85, 9.10, 16.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 8, 'AXM480', 33.21, 0.49, 22.28, false, 107, 18, 9, 20.36, 8.54, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 12, 'AXM480', 28.66, 0.49, 22.36, false, 68, 10, 12, 16.88, 8.90, 15.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 16, 'AXM480', 27.84, 0.50, 22.08, false, 140, 20, 5, 17.37, 8.95, 13.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 20, 'AXM480', 30.26, 0.51, 22.30, false, 63, 11, 14, 24.20, 8.37, 8.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 4, 'AXM480', 29.68, 0.51, 22.11, false, 125, 20, 14, 22.02, 8.08, 12.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 8, 'AXM480', 27.36, 0.50, 22.41, false, 104, 20, 19, 21.70, 9.23, 21.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 12, 'AXM480', 30.25, 0.49, 22.01, false, 88, 14, 7, 22.17, 8.28, 12.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 16, 'AXM480', 27.89, 0.50, 22.12, false, 76, 15, 15, 20.88, 8.29, 8.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 20, 'AXM480', 30.91, 0.48, 22.29, false, 127, 20, 12, 25.69, 8.93, 19.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 4, 'AXM480', 31.34, 0.51, 22.07, false, 59, 12, 8, 25.23, 8.37, 15.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 11, 'AXM479', 30.63, 0.50, 22.29, false, 64, 12, 4, 15.16, 8.39, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 15, 'AXM479', 32.03, 0.53, 22.32, false, 59, 12, 9, 23.21, 8.38, 20.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 19, 'AXM479', 33.11, 0.49, 22.36, false, 104, 17, 12, 24.60, 8.57, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 3, 'AXM479', 23.58, 0.98, 20.44, false, 139, 14, 23, 17.90, 11.63, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 7, 'AXM479', 23.61, 1.03, 21.18, false, 182, 20, 34, 20.02, 12.27, 17.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 11, 'AXM479', 23.65, 0.99, 21.92, false, 138, 17, 27, 20.91, 12.40, 19.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 15, 'AXM479', 24.37, 1.01, 20.02, false, 145, 15, 4, 21.71, 11.85, 12.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 19, 'AXM479', 23.93, 0.97, 21.30, false, 176, 20, 6, 21.86, 12.33, 16.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 12, 'AXM480', 30.41, 0.51, 22.30, false, 59, 12, 9, 18.98, 8.80, 14.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 14, 'AXM478', 31.08, 0.52, 22.07, false, 144, 20, 23, 15.78, 8.40, 12.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 18, 'AXM478', 31.67, 0.51, 22.45, false, 105, 18, 12, 19.35, 8.28, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 2, 'AXM478', 24.16, 1.00, 20.32, false, 173, 20, 24, 19.28, 12.28, 16.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 6, 'AXM478', 24.45, 0.99, 21.36, false, 100, 11, 9, 21.83, 11.89, 18.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 10, 'AXM478', 24.19, 1.02, 20.08, false, 191, 20, 33, 18.49, 12.40, 14.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 14, 'AXM478', 23.85, 0.98, 21.49, false, 105, 11, 16, 28.24, 12.15, 25.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 18, 'AXM478', 24.26, 1.00, 20.38, false, 197, 20, 4, 18.35, 12.28, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 2, 'AXM478', 23.69, 1.01, 21.40, false, 175, 20, 36, 23.05, 12.46, 12.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 16, 'AXM480', 33.35, 0.49, 22.12, false, 116, 20, 25, 23.57, 8.51, 12.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 20, 'AXM480', 26.46, 0.51, 22.39, false, 65, 13, 11, 26.32, 7.94, 17.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 4, 'AXM480', 24.43, 0.98, 21.34, false, 187, 19, 4, 29.75, 12.33, 14.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 8, 'AXM480', 24.43, 1.03, 22.08, false, 164, 20, 5, 23.56, 12.06, 20.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 12, 'AXM480', 23.97, 1.02, 20.89, false, 170, 20, 9, 25.93, 11.85, 18.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 16, 'AXM480', 24.33, 0.99, 21.38, false, 177, 20, 16, 20.43, 11.84, 12.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 20, 'AXM480', 23.72, 1.02, 20.08, false, 160, 19, 3, 29.95, 12.38, 29.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 4, 'AXM480', 24.34, 0.99, 21.91, false, 191, 20, 5, 22.84, 12.18, 18.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 3, 'AXM479', 23.69, 1.03, 20.16, false, 170, 20, 34, 19.69, 12.06, 12.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 7, 'AXM479', 24.20, 1.03, 20.30, false, 199, 20, 9, 19.93, 12.33, 15.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 11, 'AXM479', 23.88, 0.98, 21.48, false, 198, 20, 28, 22.09, 12.33, 16.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 15, 'AXM479', 23.78, 0.98, 21.14, false, 107, 11, 14, 20.69, 11.84, 12.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 19, 'AXM479', 23.78, 0.99, 21.09, false, 126, 13, 19, 24.33, 11.61, 21.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 3, 'AXM479', 24.39, 1.00, 20.37, false, 181, 20, 10, 28.26, 11.68, 20.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 7, 'AXM479', 23.68, 1.00, 21.46, false, 178, 20, 28, 27.69, 12.31, 27.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 11, 'AXM479', 23.57, 0.99, 21.23, false, 165, 20, 32, 19.68, 12.22, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 15, 'AXM479', 24.02, 0.99, 20.72, false, 154, 16, 14, 18.83, 11.81, 16.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 19, 'AXM479', 24.08, 0.98, 21.42, false, 165, 20, 20, 26.53, 12.36, 24.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 8, 'AXM480', 24.05, 0.98, 20.90, false, 80, 10, 11, 28.27, 11.80, 27.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 6, 'AXM478', 24.22, 0.99, 20.15, false, 147, 17, 18, 19.73, 11.95, 15.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 10, 'AXM478', 24.12, 1.00, 20.56, false, 174, 19, 29, 27.37, 12.33, 13.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 14, 'AXM478', 23.74, 1.03, 22.01, false, 152, 17, 19, 24.95, 11.66, 14.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 18, 'AXM478', 24.26, 1.01, 21.81, false, 169, 18, 6, 17.68, 12.18, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 2, 'AXM478', 23.58, 1.02, 22.07, false, 141, 16, 16, 28.74, 11.71, 16.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 6, 'AXM478', 23.66, 0.99, 21.04, false, 169, 20, 30, 23.95, 12.20, 12.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 10, 'AXM478', 23.91, 0.99, 20.81, false, 171, 20, 19, 17.22, 11.92, 14.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 14, 'AXM478', 23.97, 1.03, 20.97, false, 168, 20, 22, 22.91, 11.71, 12.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 18, 'AXM478', 23.56, 1.03, 21.76, false, 184, 20, 32, 28.85, 11.89, 16.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 12, 'AXM480', 23.76, 1.02, 21.21, false, 95, 10, 19, 19.50, 11.72, 16.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 16, 'AXM480', 24.10, 0.99, 20.39, false, 178, 20, 6, 19.10, 11.88, 15.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 20, 'AXM480', 23.53, 1.00, 20.57, false, 179, 20, 37, 20.54, 11.88, 14.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 4, 'AXM480', 24.20, 0.99, 21.32, false, 189, 20, 10, 18.38, 11.57, 15.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 8, 'AXM480', 23.86, 0.99, 21.19, false, 103, 12, 22, 26.15, 12.11, 23.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 12, 'AXM480', 24.00, 1.00, 21.65, false, 198, 20, 22, 20.94, 12.06, 19.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 16, 'AXM480', 23.76, 1.02, 20.05, false, 195, 20, 5, 28.01, 12.46, 13.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 20, 'AXM480', 24.16, 0.97, 20.47, false, 164, 20, 13, 21.08, 12.21, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 3, 'AXM479', 24.66, 10.00, 24.21, false, 141, 14, 24, 18.10, 11.86, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 7, 'AXM479', 26.02, 9.72, 24.78, false, 183, 20, 34, 20.10, 12.40, 17.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 11, 'AXM479', 26.57, 10.49, 25.02, false, 138, 18, 28, 21.01, 12.64, 19.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 15, 'AXM479', 26.22, 9.96, 24.51, false, 146, 15, 4, 21.79, 12.24, 12.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 19, 'AXM479', 23.93, 9.53, 24.62, false, 178, 20, 7, 21.98, 12.42, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 3, 'AXM479', 24.38, 9.93, 25.52, false, 171, 20, 35, 19.72, 12.07, 12.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 7, 'AXM479', 26.54, 10.10, 25.25, false, 199, 20, 10, 20.04, 12.61, 15.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 11, 'AXM479', 26.07, 9.51, 24.20, false, 198, 20, 28, 22.28, 12.36, 16.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 15, 'AXM479', 25.41, 10.22, 24.98, false, 107, 11, 14, 20.70, 12.04, 12.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 19, 'AXM479', 26.20, 10.35, 24.04, false, 128, 13, 20, 24.37, 11.66, 21.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 3, 'AXM479', 24.57, 10.14, 24.60, false, 183, 20, 11, 28.31, 12.03, 20.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 7, 'AXM479', 27.22, 9.82, 24.20, false, 180, 20, 29, 27.88, 12.45, 27.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 11, 'AXM479', 25.92, 9.88, 24.81, false, 165, 20, 33, 19.78, 12.26, 16.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 15, 'AXM479', 26.26, 9.83, 25.81, false, 155, 16, 15, 18.89, 12.14, 16.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 19, 'AXM479', 27.85, 10.32, 25.43, false, 166, 20, 20, 26.57, 12.68, 24.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 4, 'AXM480', 26.21, 9.63, 24.04, false, 187, 20, 4, 29.77, 12.38, 14.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 2, 'AXM478', 25.08, 10.12, 24.31, false, 175, 20, 25, 19.29, 12.48, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 6, 'AXM478', 26.00, 10.41, 25.84, false, 101, 12, 9, 21.96, 11.92, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 10, 'AXM478', 24.64, 9.95, 24.31, false, 192, 20, 34, 18.66, 12.46, 14.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 14, 'AXM478', 26.68, 10.23, 24.69, false, 105, 12, 16, 28.27, 12.52, 25.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 18, 'AXM478', 27.96, 10.21, 25.64, false, 198, 20, 5, 18.44, 12.54, 14.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 2, 'AXM478', 25.27, 10.49, 24.57, false, 175, 20, 37, 23.24, 12.57, 12.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 6, 'AXM478', 24.64, 9.89, 25.49, false, 148, 17, 18, 19.93, 12.07, 15.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 10, 'AXM478', 26.99, 9.94, 24.69, false, 176, 19, 30, 27.44, 12.54, 13.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 14, 'AXM478', 25.50, 10.23, 25.48, false, 154, 18, 19, 25.07, 11.86, 14.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 18, 'AXM478', 24.57, 9.64, 25.25, false, 170, 18, 7, 17.69, 12.20, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 2, 'AXM478', 25.74, 9.69, 25.70, false, 143, 17, 16, 28.84, 11.72, 16.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 6, 'AXM478', 26.74, 10.24, 25.72, false, 170, 20, 31, 23.97, 12.24, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 10, 'AXM478', 25.99, 9.81, 25.71, false, 172, 20, 19, 17.35, 12.16, 14.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 14, 'AXM478', 27.42, 10.28, 24.83, false, 169, 20, 23, 23.07, 11.91, 12.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 18, 'AXM478', 25.47, 9.88, 24.46, false, 186, 20, 33, 28.95, 11.91, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 8, 'AXM480', 28.38, 10.45, 25.16, false, 166, 20, 5, 23.63, 12.45, 20.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 12, 'AXM480', 26.93, 10.27, 25.76, false, 172, 20, 10, 26.12, 12.01, 18.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 16, 'AXM480', 24.64, 10.48, 25.35, false, 178, 20, 17, 20.55, 12.00, 12.78, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 20, 'AXM480', 25.77, 9.50, 24.51, false, 162, 20, 4, 30.02, 12.40, 29.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 4, 'AXM480', 26.63, 9.67, 24.70, false, 191, 20, 6, 22.95, 12.55, 19.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 8, 'AXM480', 26.54, 10.27, 25.84, false, 80, 10, 12, 28.36, 12.09, 27.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 12, 'AXM480', 23.78, 10.16, 24.06, false, 95, 10, 20, 19.59, 11.87, 16.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 16, 'AXM480', 26.46, 9.96, 25.18, false, 178, 20, 7, 19.17, 11.89, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 20, 'AXM480', 26.92, 9.58, 25.05, false, 181, 20, 37, 20.66, 12.25, 14.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 4, 'AXM480', 26.86, 9.79, 24.81, false, 190, 20, 10, 18.54, 11.82, 15.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 8, 'AXM480', 24.75, 9.82, 25.15, false, 104, 12, 22, 26.31, 12.42, 23.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 12, 'AXM480', 25.28, 9.59, 25.06, false, 200, 20, 23, 21.08, 12.09, 19.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 16, 'AXM480', 26.76, 9.57, 24.11, false, 195, 20, 5, 28.02, 12.85, 13.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 20, 'AXM480', 24.62, 10.12, 25.01, false, 164, 20, 14, 21.26, 12.44, 15.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 3, 'AXM479', 26.44, 7.05, 26.13, false, 141, 15, 24, 18.14, 12.20, 15.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 7, 'AXM479', 28.42, 8.83, 26.99, false, 185, 20, 35, 20.18, 12.49, 17.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 11, 'AXM479', 30.54, 7.58, 27.10, false, 139, 19, 28, 21.07, 12.76, 19.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 15, 'AXM479', 26.46, 7.99, 26.11, false, 146, 15, 4, 21.81, 12.48, 12.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 19, 'AXM479', 24.74, 7.20, 26.11, false, 178, 20, 7, 22.11, 12.79, 16.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 3, 'AXM479', 28.14, 7.71, 26.35, false, 172, 20, 36, 19.85, 12.23, 12.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 7, 'AXM479', 29.47, 7.54, 26.90, false, 199, 20, 11, 20.20, 12.89, 16.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 11, 'AXM479', 28.35, 8.35, 26.07, false, 200, 20, 28, 22.42, 12.65, 16.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 15, 'AXM479', 26.29, 8.51, 26.66, false, 109, 12, 14, 20.83, 12.34, 12.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 19, 'AXM479', 30.20, 8.54, 27.48, false, 130, 13, 20, 24.55, 11.75, 22.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 3, 'AXM479', 28.34, 7.68, 26.60, false, 184, 20, 12, 28.41, 12.14, 20.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 7, 'AXM479', 29.92, 8.57, 26.35, false, 181, 20, 29, 27.98, 12.82, 27.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 2, 'AXM478', 28.24, 8.97, 27.51, false, 177, 20, 25, 19.45, 12.65, 16.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 6, 'AXM478', 28.44, 8.94, 27.68, false, 102, 12, 9, 22.14, 12.09, 18.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 10, 'AXM478', 25.96, 7.45, 27.06, false, 194, 20, 34, 18.68, 12.60, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 14, 'AXM478', 28.99, 8.93, 26.68, false, 105, 12, 16, 28.32, 12.56, 25.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 18, 'AXM478', 28.39, 7.30, 26.22, false, 198, 20, 5, 18.44, 12.64, 15.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 2, 'AXM478', 28.96, 8.04, 27.01, false, 175, 20, 37, 23.43, 12.69, 12.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 6, 'AXM478', 25.12, 7.39, 26.14, false, 150, 18, 18, 19.96, 12.25, 15.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 10, 'AXM478', 30.26, 7.49, 26.74, false, 177, 20, 30, 27.64, 12.84, 13.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 14, 'AXM478', 26.79, 7.43, 26.98, false, 156, 19, 19, 25.24, 12.12, 14.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 18, 'AXM478', 27.85, 7.63, 27.27, false, 171, 19, 8, 17.72, 12.23, 14.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 2, 'AXM478', 27.03, 7.67, 27.26, false, 143, 18, 16, 28.96, 12.02, 16.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 6, 'AXM478', 29.12, 8.70, 26.23, false, 171, 20, 31, 23.97, 12.48, 12.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 4, 'AXM480', 27.40, 8.97, 26.35, false, 189, 20, 4, 29.94, 12.60, 15.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 8, 'AXM480', 28.59, 7.55, 26.84, false, 168, 20, 6, 23.82, 12.51, 20.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 12, 'AXM480', 29.73, 7.95, 27.13, false, 174, 20, 10, 26.20, 12.15, 19.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 16, 'AXM480', 27.10, 8.05, 26.81, false, 178, 20, 17, 20.75, 12.16, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 20, 'AXM480', 25.95, 8.04, 26.75, false, 163, 20, 5, 30.19, 12.65, 29.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 4, 'AXM480', 28.87, 7.36, 26.16, false, 191, 20, 7, 23.06, 12.73, 19.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 8, 'AXM480', 30.31, 7.13, 26.21, false, 81, 10, 13, 28.56, 12.10, 27.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 12, 'AXM480', 24.18, 8.69, 27.61, false, 95, 10, 21, 19.62, 12.25, 16.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 16, 'AXM480', 27.15, 8.38, 26.19, false, 180, 20, 7, 19.28, 11.94, 15.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 20, 'AXM480', 28.46, 7.68, 27.19, false, 181, 20, 38, 20.78, 12.55, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 4, 'AXM480', 30.00, 7.24, 26.59, false, 192, 20, 11, 18.61, 11.90, 15.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 11, 'AXM479', 26.08, 7.10, 26.51, false, 165, 20, 33, 19.90, 12.34, 16.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 15, 'AXM479', 26.87, 8.95, 26.75, false, 157, 16, 15, 18.93, 12.35, 16.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 19, 'AXM479', 30.61, 8.63, 27.53, false, 167, 20, 20, 26.73, 12.90, 24.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 3, 'AXM479', 29.07, 0.52, 22.04, false, 141, 15, 25, 18.20, 12.54, 15.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 7, 'AXM479', 31.15, 0.51, 22.38, false, 187, 20, 35, 20.19, 12.86, 17.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 11, 'AXM479', 31.95, 0.51, 22.25, false, 141, 20, 29, 21.19, 12.96, 19.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 15, 'AXM479', 28.74, 0.49, 22.41, false, 148, 16, 5, 21.82, 12.56, 12.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 19, 'AXM479', 26.68, 0.52, 22.47, false, 178, 20, 8, 22.21, 13.11, 16.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 12, 'AXM480', 25.99, 8.64, 26.11, false, 201, 20, 23, 21.20, 12.22, 19.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 14, 'AXM478', 28.00, 7.41, 27.01, false, 169, 20, 24, 23.17, 12.07, 12.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 18, 'AXM478', 26.89, 8.13, 26.44, false, 187, 20, 33, 28.95, 12.26, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 2, 'AXM478', 31.32, 0.48, 22.42, false, 178, 20, 26, 19.57, 12.70, 16.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 6, 'AXM478', 31.33, 0.50, 22.10, false, 102, 12, 9, 22.32, 12.36, 19.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 10, 'AXM478', 27.36, 0.48, 22.21, false, 194, 20, 35, 18.77, 12.68, 14.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 14, 'AXM478', 31.31, 0.50, 22.32, false, 107, 12, 16, 28.51, 12.85, 25.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 18, 'AXM478', 29.15, 0.48, 22.44, false, 198, 20, 6, 18.49, 12.73, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 2, 'AXM478', 29.20, 0.51, 22.38, false, 175, 20, 37, 23.47, 12.96, 13.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 16, 'AXM480', 29.19, 8.00, 27.29, false, 197, 20, 6, 28.17, 13.04, 13.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 20, 'AXM480', 26.84, 8.08, 27.18, false, 165, 20, 15, 21.31, 12.58, 15.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 4, 'AXM480', 28.16, 0.49, 22.01, false, 189, 20, 5, 30.10, 12.90, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 8, 'AXM480', 30.94, 0.53, 22.13, false, 168, 20, 7, 23.88, 12.56, 20.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 12, 'AXM480', 30.30, 0.51, 22.46, false, 174, 20, 10, 26.37, 12.34, 19.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 16, 'AXM480', 30.75, 0.47, 22.05, false, 179, 20, 17, 20.75, 12.25, 12.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 20, 'AXM480', 29.80, 0.49, 22.34, false, 163, 20, 5, 30.38, 12.84, 29.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 4, 'AXM480', 31.49, 0.49, 22.26, false, 191, 20, 8, 23.20, 12.76, 19.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 3, 'AXM479', 30.47, 0.50, 22.28, false, 174, 20, 36, 19.89, 12.57, 12.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 7, 'AXM479', 33.07, 0.50, 22.47, false, 199, 20, 12, 20.33, 12.89, 16.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 11, 'AXM479', 30.76, 0.48, 22.18, false, 202, 20, 28, 22.60, 12.90, 16.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 15, 'AXM479', 27.56, 0.48, 22.02, false, 109, 12, 15, 20.97, 12.67, 12.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 19, 'AXM479', 30.39, 0.53, 22.54, false, 130, 14, 21, 24.56, 12.04, 22.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 3, 'AXM479', 29.36, 0.49, 22.25, false, 184, 20, 13, 28.52, 12.25, 20.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 7, 'AXM479', 30.62, 0.50, 22.14, false, 183, 20, 29, 28.03, 13.04, 27.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 11, 'AXM479', 26.89, 0.50, 22.30, false, 165, 20, 34, 20.00, 12.42, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 15, 'AXM479', 28.05, 0.52, 22.04, false, 157, 17, 15, 19.12, 12.41, 16.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 19, 'AXM479', 34.27, 0.47, 22.44, false, 167, 20, 20, 26.77, 13.22, 24.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 8, 'AXM480', 32.00, 0.48, 22.30, false, 81, 11, 13, 28.76, 12.34, 27.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 6, 'AXM478', 27.72, 0.48, 22.45, false, 152, 19, 19, 20.01, 12.49, 15.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 10, 'AXM478', 31.52, 0.52, 22.02, false, 179, 20, 31, 27.69, 12.95, 13.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 14, 'AXM478', 29.39, 0.53, 22.47, false, 157, 20, 19, 25.36, 12.52, 14.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 18, 'AXM478', 31.18, 0.53, 22.49, false, 172, 19, 9, 17.75, 12.43, 14.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 2, 'AXM478', 27.33, 0.52, 22.44, false, 144, 19, 17, 29.00, 12.10, 16.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 6, 'AXM478', 29.81, 0.52, 22.21, false, 172, 20, 31, 24.05, 12.58, 12.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 10, 'AXM478', 30.43, 0.53, 22.39, false, 175, 20, 21, 17.57, 12.61, 15.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 14, 'AXM478', 31.66, 0.52, 22.33, false, 170, 20, 25, 23.33, 12.45, 12.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 18, 'AXM478', 28.78, 0.51, 22.45, false, 187, 20, 34, 29.01, 12.54, 16.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 12, 'AXM480', 27.90, 0.52, 22.03, false, 96, 10, 22, 19.66, 12.54, 16.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 16, 'AXM480', 30.32, 0.47, 22.25, false, 181, 20, 7, 19.43, 11.94, 15.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 20, 'AXM480', 29.16, 0.49, 22.03, false, 183, 20, 39, 20.93, 12.91, 14.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 4, 'AXM480', 30.82, 0.49, 22.16, false, 194, 20, 11, 18.75, 12.26, 15.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 8, 'AXM480', 28.58, 0.52, 22.36, false, 107, 14, 23, 26.53, 12.90, 23.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 12, 'AXM480', 29.57, 0.52, 22.29, false, 202, 20, 23, 21.21, 12.54, 19.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 16, 'AXM480', 31.78, 0.49, 22.21, false, 197, 20, 7, 28.27, 13.05, 13.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 20, 'AXM480', 27.35, 0.50, 22.07, false, 165, 20, 15, 21.33, 12.59, 15.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 3, 'AXM479', 23.91, 0.99, 20.34, false, 159, 14, 32, 31.63, 15.75, 30.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 7, 'AXM479', 23.80, 0.99, 21.89, false, 241, 20, 49, 31.57, 16.46, 21.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 11, 'AXM479', 24.29, 1.01, 20.19, false, 211, 17, 31, 31.37, 15.50, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 15, 'AXM479', 23.81, 1.02, 21.96, false, 181, 15, 25, 31.66, 16.32, 28.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 19, 'AXM479', 24.17, 0.98, 21.53, false, 232, 20, 42, 23.42, 16.22, 21.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 3, 'AXM479', 23.76, 1.00, 21.79, false, 237, 20, 18, 24.29, 15.94, 18.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 7, 'AXM479', 24.48, 1.01, 21.78, false, 238, 20, 34, 31.02, 16.26, 17.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 11, 'AXM479', 24.36, 1.00, 21.01, false, 260, 20, 9, 28.98, 15.75, 17.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 15, 'AXM479', 24.45, 1.00, 20.99, false, 128, 11, 22, 23.51, 15.80, 18.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 19, 'AXM479', 24.27, 1.01, 21.31, false, 164, 13, 8, 30.38, 15.80, 20.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 3, 'AXM479', 24.40, 1.02, 20.15, false, 252, 20, 18, 31.79, 15.77, 20.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 7, 'AXM479', 24.27, 1.03, 21.97, false, 239, 20, 29, 28.18, 15.57, 25.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 11, 'AXM479', 24.13, 0.97, 20.22, false, 235, 20, 9, 23.31, 16.07, 18.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 15, 'AXM479', 24.02, 0.98, 21.11, false, 194, 16, 12, 31.69, 15.63, 27.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 19, 'AXM479', 24.44, 0.99, 20.18, false, 231, 20, 31, 27.14, 15.58, 20.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 4, 'AXM480', 23.62, 0.97, 20.63, false, 216, 19, 19, 27.41, 15.90, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 2, 'AXM478', 24.47, 1.01, 20.74, false, 228, 20, 33, 30.24, 16.23, 27.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 6, 'AXM478', 24.00, 0.98, 21.66, false, 127, 11, 25, 29.63, 16.28, 25.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 10, 'AXM478', 23.60, 0.99, 21.84, false, 239, 20, 46, 24.26, 16.38, 22.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 14, 'AXM478', 24.27, 1.01, 21.25, false, 122, 11, 18, 29.58, 16.07, 26.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 18, 'AXM478', 23.59, 1.00, 21.46, false, 240, 20, 24, 29.17, 15.82, 16.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 2, 'AXM478', 23.53, 1.01, 21.40, false, 247, 20, 6, 31.63, 16.02, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 6, 'AXM478', 23.69, 1.03, 21.01, false, 203, 17, 37, 29.35, 16.35, 23.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 10, 'AXM478', 24.42, 0.98, 20.42, false, 223, 19, 37, 21.73, 16.06, 17.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 14, 'AXM478', 24.27, 0.99, 20.79, false, 195, 17, 29, 21.58, 15.79, 17.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 18, 'AXM478', 24.20, 1.01, 22.02, false, 229, 18, 8, 33.22, 15.56, 18.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 2, 'AXM478', 23.57, 0.99, 21.79, false, 195, 16, 35, 26.34, 15.71, 23.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 6, 'AXM478', 24.25, 0.99, 20.81, false, 251, 20, 42, 30.66, 16.02, 17.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 10, 'AXM478', 24.47, 1.00, 21.02, false, 245, 20, 46, 29.71, 15.75, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 14, 'AXM478', 23.80, 0.99, 21.28, false, 242, 20, 4, 23.43, 16.05, 23.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 18, 'AXM478', 24.33, 1.00, 21.87, false, 259, 20, 10, 32.31, 16.01, 19.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 8, 'AXM480', 24.18, 1.02, 20.17, false, 256, 20, 33, 26.10, 16.11, 16.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 12, 'AXM480', 24.22, 0.98, 21.10, false, 238, 20, 17, 32.31, 15.72, 21.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 16, 'AXM480', 24.31, 0.97, 20.70, false, 226, 20, 20, 21.90, 16.13, 17.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 20, 'AXM480', 24.33, 0.98, 20.31, false, 240, 19, 47, 28.11, 16.30, 21.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 4, 'AXM480', 23.84, 0.98, 20.92, false, 241, 20, 37, 23.91, 15.88, 23.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 8, 'AXM480', 24.27, 0.97, 20.43, false, 111, 10, 9, 30.47, 15.93, 23.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 12, 'AXM480', 23.81, 1.02, 20.18, false, 113, 10, 9, 23.75, 16.34, 17.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 16, 'AXM480', 23.87, 1.02, 20.05, false, 236, 20, 7, 32.15, 15.88, 16.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 20, 'AXM480', 24.35, 0.99, 20.23, false, 255, 20, 11, 27.42, 15.81, 17.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 4, 'AXM480', 24.14, 1.02, 20.80, false, 260, 20, 4, 27.41, 15.83, 24.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 8, 'AXM480', 23.98, 1.00, 20.88, false, 138, 12, 13, 26.54, 16.50, 22.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 12, 'AXM480', 23.87, 0.97, 20.65, false, 240, 20, 30, 21.47, 16.08, 19.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 16, 'AXM480', 23.57, 1.03, 22.06, false, 245, 20, 32, 28.99, 15.59, 26.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 20, 'AXM480', 23.92, 1.02, 20.94, false, 259, 20, 41, 32.31, 16.39, 24.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 3, 'AXM479', 27.43, 10.07, 25.32, false, 159, 14, 32, 31.80, 15.89, 30.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 7, 'AXM479', 26.74, 9.94, 24.14, false, 241, 20, 50, 31.70, 16.59, 21.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 11, 'AXM479', 27.51, 10.27, 24.24, false, 213, 18, 32, 31.56, 15.69, 18.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 15, 'AXM479', 26.24, 10.17, 24.74, false, 182, 15, 26, 31.77, 16.39, 28.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 19, 'AXM479', 24.88, 9.56, 24.39, false, 234, 20, 42, 23.46, 16.46, 21.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 3, 'AXM479', 27.65, 10.02, 24.38, false, 237, 20, 18, 24.36, 16.27, 18.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 7, 'AXM479', 25.37, 9.88, 25.05, false, 238, 20, 35, 31.14, 16.62, 17.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 11, 'AXM479', 26.58, 9.97, 25.78, false, 261, 20, 9, 29.05, 15.92, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 15, 'AXM479', 27.96, 9.88, 24.98, false, 128, 11, 23, 23.55, 15.96, 18.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 19, 'AXM479', 27.25, 9.63, 24.77, false, 164, 13, 8, 30.47, 16.04, 20.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 3, 'AXM479', 24.88, 10.25, 25.40, false, 252, 20, 18, 31.96, 15.91, 20.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 7, 'AXM479', 25.84, 9.59, 24.25, false, 241, 20, 30, 28.34, 15.82, 25.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 2, 'AXM478', 27.42, 9.58, 25.80, false, 230, 20, 34, 30.33, 16.57, 27.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 6, 'AXM478', 26.78, 9.64, 25.59, false, 128, 12, 25, 29.75, 16.60, 26.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 10, 'AXM478', 26.20, 9.53, 25.17, false, 240, 20, 46, 24.37, 16.53, 22.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 14, 'AXM478', 26.11, 10.20, 25.20, false, 124, 12, 19, 29.69, 16.32, 26.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 18, 'AXM478', 25.75, 9.96, 25.42, false, 242, 20, 25, 29.21, 16.03, 16.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 2, 'AXM478', 23.99, 9.79, 25.69, false, 248, 20, 6, 31.68, 16.11, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 6, 'AXM478', 25.25, 9.94, 24.82, false, 205, 17, 38, 29.53, 16.51, 23.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 10, 'AXM478', 26.18, 9.98, 24.62, false, 223, 19, 37, 21.79, 16.45, 17.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 14, 'AXM478', 26.66, 9.79, 25.45, false, 197, 18, 30, 21.69, 15.81, 17.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 18, 'AXM478', 25.13, 9.86, 25.79, false, 230, 18, 8, 33.30, 15.80, 18.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 2, 'AXM478', 24.39, 10.15, 25.34, false, 195, 17, 36, 26.36, 15.97, 23.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 6, 'AXM478', 26.68, 9.83, 25.55, false, 252, 20, 43, 30.81, 16.26, 17.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 4, 'AXM480', 27.18, 10.17, 25.23, false, 216, 20, 19, 27.45, 15.99, 20.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 8, 'AXM480', 26.17, 9.65, 25.73, false, 258, 20, 33, 26.14, 16.29, 16.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 12, 'AXM480', 24.29, 9.98, 24.56, false, 239, 20, 18, 32.35, 15.80, 21.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 16, 'AXM480', 26.80, 10.36, 24.33, false, 226, 20, 20, 22.06, 16.35, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 20, 'AXM480', 27.22, 10.35, 25.66, false, 240, 20, 48, 28.31, 16.48, 21.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 4, 'AXM480', 27.84, 10.28, 25.12, false, 243, 20, 38, 24.09, 16.13, 23.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 8, 'AXM480', 26.66, 10.06, 25.48, false, 111, 10, 9, 30.60, 16.13, 23.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 12, 'AXM480', 26.45, 10.48, 25.09, false, 115, 10, 10, 23.93, 16.42, 17.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 16, 'AXM480', 25.54, 9.73, 25.74, false, 238, 20, 7, 32.21, 16.06, 16.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 20, 'AXM480', 25.25, 10.49, 24.14, false, 257, 20, 12, 27.43, 16.16, 17.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 4, 'AXM480', 25.93, 9.83, 24.93, false, 260, 20, 5, 27.52, 16.05, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 11, 'AXM479', 27.89, 9.79, 24.09, false, 236, 20, 10, 23.45, 16.13, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 15, 'AXM479', 24.60, 9.65, 24.11, false, 194, 16, 13, 31.71, 15.85, 27.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 19, 'AXM479', 27.37, 9.94, 24.51, false, 232, 20, 31, 27.19, 15.62, 21.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 3, 'AXM479', 27.50, 8.18, 26.32, false, 159, 15, 33, 31.83, 16.10, 30.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 7, 'AXM479', 27.67, 7.49, 26.94, false, 242, 20, 51, 31.78, 16.99, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 11, 'AXM479', 30.07, 8.04, 27.07, false, 215, 19, 32, 31.76, 15.72, 18.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 15, 'AXM479', 28.36, 7.93, 26.13, false, 183, 15, 26, 31.96, 16.57, 28.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 19, 'AXM479', 25.48, 7.85, 26.90, false, 234, 20, 42, 23.49, 16.56, 21.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 12, 'AXM480', 24.56, 9.87, 25.16, false, 240, 20, 31, 21.63, 16.09, 19.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 14, 'AXM478', 26.05, 9.99, 25.64, false, 242, 20, 4, 23.53, 16.35, 23.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 18, 'AXM478', 25.50, 9.52, 24.71, false, 261, 20, 11, 32.38, 16.26, 19.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 2, 'AXM478', 30.61, 8.98, 27.37, false, 231, 20, 35, 30.33, 16.83, 27.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 6, 'AXM478', 27.74, 7.21, 26.68, false, 130, 12, 25, 29.89, 16.93, 26.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 10, 'AXM478', 28.22, 7.59, 26.81, false, 241, 20, 47, 24.53, 16.64, 22.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 14, 'AXM478', 29.85, 7.56, 26.24, false, 124, 12, 20, 29.77, 16.55, 26.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 18, 'AXM478', 26.56, 8.53, 26.65, false, 242, 20, 26, 29.27, 16.23, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 2, 'AXM478', 27.45, 7.67, 26.30, false, 248, 20, 6, 31.70, 16.13, 18.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 16, 'AXM480', 25.35, 9.53, 24.88, false, 245, 20, 33, 29.05, 15.84, 26.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 20, 'AXM480', 25.30, 10.25, 24.96, false, 260, 20, 42, 32.42, 16.71, 24.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 4, 'AXM480', 28.55, 7.51, 27.16, false, 216, 20, 20, 27.56, 16.24, 20.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 8, 'AXM480', 27.73, 7.01, 26.57, false, 258, 20, 34, 26.24, 16.36, 16.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 12, 'AXM480', 28.16, 7.76, 27.14, false, 239, 20, 19, 32.52, 15.81, 21.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 16, 'AXM480', 28.83, 8.60, 27.52, false, 226, 20, 21, 22.24, 16.47, 17.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 20, 'AXM480', 29.72, 8.81, 27.34, false, 241, 20, 49, 28.35, 16.83, 21.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 4, 'AXM480', 29.92, 7.03, 26.99, false, 244, 20, 39, 24.15, 16.50, 23.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 3, 'AXM479', 31.41, 8.77, 26.83, false, 238, 20, 19, 24.40, 16.47, 18.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 7, 'AXM479', 28.53, 8.57, 26.65, false, 239, 20, 36, 31.27, 16.65, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 11, 'AXM479', 27.10, 8.95, 27.52, false, 261, 20, 9, 29.15, 15.96, 18.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 15, 'AXM479', 28.20, 7.06, 26.89, false, 128, 12, 24, 23.70, 16.18, 18.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 19, 'AXM479', 27.83, 8.12, 26.47, false, 165, 13, 8, 30.65, 16.33, 20.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 3, 'AXM479', 25.86, 8.15, 26.32, false, 252, 20, 18, 32.04, 16.28, 20.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 7, 'AXM479', 27.32, 7.03, 26.04, false, 242, 20, 31, 28.51, 15.94, 25.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 11, 'AXM479', 31.41, 8.46, 26.73, false, 238, 20, 11, 23.48, 16.49, 18.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 15, 'AXM479', 25.85, 8.13, 26.94, false, 196, 16, 14, 31.78, 15.90, 27.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 19, 'AXM479', 28.92, 7.79, 26.89, false, 233, 20, 31, 27.22, 15.86, 21.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 8, 'AXM480', 30.64, 7.21, 26.48, false, 113, 10, 10, 30.79, 16.34, 23.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 6, 'AXM478', 28.97, 8.56, 27.25, false, 207, 18, 38, 29.57, 16.61, 23.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 10, 'AXM478', 29.80, 8.16, 26.14, false, 225, 20, 38, 21.87, 16.79, 17.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 14, 'AXM478', 28.40, 7.85, 27.20, false, 199, 19, 30, 21.73, 16.19, 18.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 18, 'AXM478', 28.78, 7.29, 26.78, false, 231, 19, 8, 33.34, 15.83, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 2, 'AXM478', 28.09, 8.16, 26.72, false, 196, 18, 37, 26.49, 16.20, 23.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 6, 'AXM478', 27.75, 8.42, 26.74, false, 254, 20, 43, 30.85, 16.31, 18.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 10, 'AXM478', 28.60, 8.95, 27.22, false, 247, 20, 48, 29.96, 16.27, 22.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 14, 'AXM478', 26.32, 7.53, 27.04, false, 242, 20, 4, 23.54, 16.71, 23.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 18, 'AXM478', 27.22, 8.92, 26.46, false, 262, 20, 11, 32.49, 16.47, 19.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 12, 'AXM480', 29.98, 8.10, 26.27, false, 117, 10, 11, 24.06, 16.79, 17.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 16, 'AXM480', 26.42, 8.25, 26.35, false, 238, 20, 8, 32.31, 16.24, 16.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 20, 'AXM480', 26.78, 8.46, 26.72, false, 257, 20, 12, 27.61, 16.51, 17.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 4, 'AXM480', 27.56, 7.11, 26.09, false, 261, 20, 6, 27.55, 16.37, 24.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 8, 'AXM480', 27.67, 8.01, 27.24, false, 142, 13, 15, 26.77, 16.92, 22.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 12, 'AXM480', 26.11, 7.20, 26.37, false, 240, 20, 32, 21.83, 16.38, 19.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 16, 'AXM480', 27.40, 7.95, 26.80, false, 247, 20, 33, 29.10, 15.90, 26.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 20, 'AXM480', 25.83, 8.23, 26.66, false, 262, 20, 43, 32.57, 16.97, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 3, 'AXM479', 29.87, 0.49, 22.18, false, 160, 15, 33, 31.93, 16.12, 30.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 7, 'AXM479', 27.98, 0.50, 22.03, false, 243, 20, 51, 31.84, 17.17, 22.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 11, 'AXM479', 31.12, 0.52, 22.44, false, 215, 20, 32, 31.80, 15.93, 18.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 15, 'AXM479', 29.48, 0.49, 22.24, false, 183, 16, 26, 31.96, 16.94, 28.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 19, 'AXM479', 28.11, 0.48, 22.30, false, 236, 20, 43, 23.58, 16.75, 21.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 3, 'AXM479', 32.67, 0.52, 22.50, false, 239, 20, 19, 24.42, 16.56, 18.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 7, 'AXM479', 31.87, 0.48, 22.36, false, 239, 20, 36, 31.41, 16.67, 18.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 11, 'AXM479', 30.34, 0.49, 22.16, false, 262, 20, 10, 29.27, 15.99, 18.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 15, 'AXM479', 28.76, 0.52, 22.52, false, 128, 12, 25, 23.82, 16.50, 18.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 19, 'AXM479', 29.54, 0.49, 22.34, false, 165, 14, 9, 30.71, 16.50, 20.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 3, 'AXM479', 26.40, 0.53, 22.33, false, 253, 20, 19, 32.07, 16.32, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 7, 'AXM479', 27.48, 0.48, 22.38, false, 242, 20, 32, 28.52, 16.06, 25.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 11, 'AXM479', 35.37, 0.50, 22.34, false, 238, 20, 12, 23.50, 16.60, 18.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 15, 'AXM479', 28.15, 0.52, 22.39, false, 196, 17, 14, 31.93, 16.20, 27.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 19, 'AXM479', 29.79, 0.53, 22.35, false, 235, 20, 32, 27.39, 15.95, 21.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 4, 'AXM480', 32.31, 0.47, 22.35, false, 216, 20, 20, 27.64, 16.45, 20.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 2, 'AXM478', 31.00, 0.49, 22.35, false, 233, 20, 36, 30.35, 16.93, 27.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 6, 'AXM478', 30.48, 0.52, 22.16, false, 130, 12, 26, 30.01, 16.94, 26.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 10, 'AXM478', 28.63, 0.53, 22.44, false, 242, 20, 47, 24.57, 16.89, 22.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 14, 'AXM478', 33.42, 0.52, 22.32, false, 125, 12, 21, 29.77, 16.74, 26.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 18, 'AXM478', 26.63, 0.50, 22.43, false, 242, 20, 26, 29.38, 16.34, 16.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 2, 'AXM478', 31.20, 0.52, 22.50, false, 249, 20, 7, 31.85, 16.51, 18.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 6, 'AXM478', 31.02, 0.52, 22.04, false, 208, 19, 39, 29.58, 16.98, 23.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 10, 'AXM478', 31.72, 0.48, 22.00, false, 225, 20, 39, 21.98, 17.05, 17.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 14, 'AXM478', 30.44, 0.49, 22.25, false, 200, 20, 31, 21.87, 16.22, 18.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 18, 'AXM478', 32.53, 0.50, 22.39, false, 231, 19, 8, 33.39, 16.20, 18.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 2, 'AXM478', 28.95, 0.47, 22.01, false, 197, 19, 38, 26.58, 16.24, 23.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 6, 'AXM478', 28.46, 0.47, 22.27, false, 256, 20, 44, 31.00, 16.32, 18.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 10, 'AXM478', 32.50, 0.50, 22.24, false, 247, 20, 49, 30.08, 16.28, 22.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 14, 'AXM478', 26.90, 0.50, 22.40, false, 244, 20, 4, 23.61, 16.95, 23.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 18, 'AXM478', 28.42, 0.51, 22.14, false, 264, 20, 12, 32.64, 16.73, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 8, 'AXM480', 28.54, 0.51, 22.11, false, 258, 20, 35, 26.35, 16.36, 16.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 12, 'AXM480', 31.96, 0.49, 22.04, false, 241, 20, 20, 32.66, 15.89, 21.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 16, 'AXM480', 29.33, 0.49, 22.01, false, 227, 20, 21, 22.25, 16.49, 17.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 20, 'AXM480', 30.62, 0.51, 22.02, false, 241, 20, 50, 28.45, 17.22, 21.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 4, 'AXM480', 31.90, 0.48, 22.22, false, 244, 20, 39, 24.30, 16.76, 23.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 8, 'AXM480', 31.28, 0.49, 22.36, false, 115, 11, 10, 30.91, 16.35, 23.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 12, 'AXM480', 31.04, 0.51, 22.25, false, 119, 10, 12, 24.15, 17.03, 17.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 16, 'AXM480', 27.79, 0.51, 22.36, false, 239, 20, 8, 32.37, 16.32, 16.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 20, 'AXM480', 27.84, 0.47, 22.10, false, 257, 20, 13, 27.80, 16.87, 17.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 4, 'AXM480', 29.38, 0.51, 22.40, false, 261, 20, 6, 27.59, 16.63, 24.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 8, 'AXM480', 30.66, 0.47, 22.40, false, 142, 14, 15, 26.87, 16.98, 22.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 12, 'AXM480', 26.13, 0.50, 22.30, false, 242, 20, 33, 21.93, 16.73, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 16, 'AXM480', 31.25, 0.50, 22.36, false, 247, 20, 33, 29.21, 16.13, 26.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 20, 'AXM480', 27.46, 0.52, 22.30, false, 263, 20, 44, 32.67, 17.18, 24.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 1, 'AXM477', 24.19, 0.97, 21.14, false, 35, 5, 2, 8.70, 1.71, 3.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 5, 'AXM477', 24.41, 0.97, 20.80, false, 10, 16, 2, 16.32, 1.81, 3.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 9, 'AXM477', 23.93, 1.01, 20.62, false, 0, 0, 0, 17.84, 1.85, 15.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 13, 'AXM477', 24.28, 1.02, 20.73, false, 6, 11, 0, 16.89, 2.35, 4.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'A', 17, 'AXM477', 24.34, 1.03, 20.09, false, 2, 3, 0, 17.56, 1.73, 14.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 1, 'AXM477', 24.50, 1.01, 20.53, false, 24, 9, 4, 8.70, 1.62, 6.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 5, 'AXM477', 23.95, 1.01, 21.19, false, 4, 15, 0, 9.79, 1.64, 5.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 9, 'AXM477', 23.50, 1.02, 21.51, false, 29, 19, 4, 8.04, 1.50, 2.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 13, 'AXM477', 23.98, 1.00, 21.14, false, 8, 5, 1, 11.28, 2.50, 8.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'B', 17, 'AXM477', 24.22, 1.01, 20.87, false, 22, 14, 4, 12.65, 1.92, 4.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 1, 'AXM477', 24.17, 1.01, 20.01, false, 22, 0, 3, 8.70, 1.55, 8.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 5, 'AXM477', 24.21, 0.99, 20.51, false, 2, 18, 0, 10.44, 1.57, 10.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 9, 'AXM477', 24.46, 0.98, 21.54, false, 5, 8, 0, 8.67, 1.74, 7.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 13, 'AXM477', 23.97, 0.98, 20.22, false, 5, 7, 0, 8.52, 2.27, 4.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '08:00:00', 'C', 17, 'AXM477', 24.16, 1.00, 20.80, false, 0, 2, 0, 19.99, 1.65, 17.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 1, 'AXM477', 26.66, 9.82, 25.10, false, 37, 5, 2, 8.72, 1.74, 3.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 5, 'AXM477', 25.54, 9.67, 24.08, false, 12, 17, 2, 16.40, 1.95, 3.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 9, 'AXM477', 27.66, 10.03, 24.44, false, 1, 1, 1, 17.87, 2.04, 15.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 13, 'AXM477', 25.91, 9.68, 24.85, false, 7, 12, 0, 17.05, 2.53, 4.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'A', 17, 'AXM477', 27.54, 9.81, 25.40, false, 4, 3, 1, 17.60, 1.92, 14.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 1, 'AXM477', 27.08, 9.53, 25.34, false, 25, 10, 4, 8.74, 1.62, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 5, 'AXM477', 26.90, 10.17, 24.19, false, 6, 15, 1, 9.80, 1.97, 5.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 9, 'AXM477', 27.03, 9.89, 25.84, false, 31, 20, 5, 8.09, 1.79, 2.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 13, 'AXM477', 24.62, 9.65, 24.99, false, 10, 5, 1, 11.28, 2.63, 8.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'B', 17, 'AXM477', 27.69, 10.49, 24.05, false, 22, 15, 5, 12.70, 2.29, 4.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 1, 'AXM477', 25.42, 9.57, 25.18, false, 22, 1, 4, 8.84, 1.89, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 5, 'AXM477', 25.84, 10.21, 24.70, false, 4, 18, 0, 10.50, 1.93, 10.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 9, 'AXM477', 24.97, 10.30, 25.72, false, 5, 8, 0, 8.87, 2.09, 7.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 13, 'AXM477', 24.05, 10.16, 25.51, false, 6, 7, 0, 8.53, 2.66, 4.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 17, 'AXM477', 25.59, 10.08, 25.65, false, 1, 2, 1, 20.12, 2.01, 17.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 1, 'AXM477', 28.08, 8.26, 26.03, false, 38, 6, 2, 8.77, 1.95, 3.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 5, 'AXM477', 26.29, 8.38, 26.91, false, 14, 18, 3, 16.42, 2.34, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 9, 'AXM477', 28.29, 7.91, 26.22, false, 1, 2, 2, 17.97, 2.27, 15.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 13, 'AXM477', 27.18, 8.86, 26.41, false, 9, 12, 0, 17.20, 2.92, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'A', 17, 'AXM477', 31.50, 8.25, 26.97, false, 4, 3, 2, 17.60, 2.22, 14.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 1, 'AXM477', 28.15, 7.22, 26.51, false, 27, 11, 4, 8.86, 1.63, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 5, 'AXM477', 29.99, 7.60, 26.59, false, 8, 15, 2, 9.81, 2.09, 5.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 9, 'AXM477', 29.01, 8.76, 26.89, false, 31, 20, 5, 8.20, 1.83, 2.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 13, 'AXM477', 27.93, 7.05, 26.68, false, 12, 5, 1, 11.44, 2.66, 8.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'B', 17, 'AXM477', 29.46, 7.06, 26.07, false, 24, 16, 5, 12.78, 2.52, 5.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 1, 'AXM477', 26.14, 7.76, 27.27, false, 24, 2, 5, 8.90, 2.29, 8.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 5, 'AXM477', 27.89, 7.04, 26.22, false, 6, 19, 0, 10.62, 2.23, 10.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 9, 'AXM477', 27.60, 7.23, 26.83, false, 6, 9, 0, 8.92, 2.48, 7.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 13, 'AXM477', 27.15, 7.40, 26.70, false, 6, 8, 0, 8.65, 3.00, 4.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '16:00:00', 'C', 17, 'AXM477', 28.61, 7.16, 26.37, false, 3, 2, 1, 20.14, 2.03, 17.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 1, 'AXM477', 28.70, 0.50, 22.24, false, 38, 7, 3, 8.79, 2.01, 3.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 5, 'AXM477', 26.39, 0.52, 22.03, false, 14, 19, 4, 16.46, 2.59, 3.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 9, 'AXM477', 29.61, 0.53, 22.33, false, 1, 3, 3, 17.97, 2.59, 15.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 13, 'AXM477', 29.61, 0.51, 22.20, false, 10, 13, 1, 17.26, 3.23, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'A', 17, 'AXM477', 33.95, 0.53, 22.25, false, 4, 3, 3, 17.77, 2.54, 14.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 1, 'AXM477', 31.37, 0.49, 22.45, false, 27, 12, 4, 8.88, 1.97, 6.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 5, 'AXM477', 31.01, 0.53, 22.24, false, 8, 16, 3, 9.98, 2.11, 5.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 9, 'AXM477', 30.76, 0.52, 22.18, false, 33, 20, 6, 8.30, 2.11, 2.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 13, 'AXM477', 28.85, 0.53, 22.16, false, 13, 5, 2, 11.45, 2.91, 8.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'B', 17, 'AXM477', 31.64, 0.52, 22.42, false, 24, 17, 6, 12.95, 2.64, 5.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 1, 'AXM477', 26.52, 0.52, 22.46, false, 24, 3, 6, 9.06, 2.58, 8.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 5, 'AXM477', 29.50, 0.52, 22.41, false, 7, 19, 0, 10.63, 2.50, 10.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 9, 'AXM477', 28.50, 0.50, 22.46, false, 8, 10, 0, 9.10, 2.56, 7.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 13, 'AXM477', 28.08, 0.48, 22.12, false, 7, 9, 1, 8.67, 3.18, 4.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '20:00:00', 'C', 17, 'AXM477', 30.56, 0.53, 22.26, false, 3, 2, 2, 20.27, 2.09, 17.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 1, 'AXM477', 24.31, 1.02, 21.43, false, 9, 17, 1, 8.70, 2.39, 8.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 5, 'AXM477', 23.91, 1.00, 20.82, false, 9, 6, 1, 18.39, 2.40, 16.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 9, 'AXM477', 24.44, 1.03, 20.08, false, 10, 6, 1, 14.81, 2.26, 7.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 13, 'AXM477', 23.78, 0.99, 20.40, false, 2, 3, 0, 8.88, 1.55, 3.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'A', 17, 'AXM477', 23.84, 0.98, 21.22, false, 4, 5, 0, 15.32, 2.35, 5.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 1, 'AXM477', 23.79, 0.99, 20.56, false, 41, 2, 3, 8.70, 2.15, 8.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 5, 'AXM477', 24.42, 1.00, 21.60, false, 7, 7, 1, 10.53, 1.92, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 9, 'AXM477', 23.95, 0.97, 21.82, false, 1, 1, 0, 17.01, 1.93, 13.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 13, 'AXM477', 24.01, 0.99, 21.18, false, 11, 12, 1, 13.93, 1.55, 11.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'B', 17, 'AXM477', 23.79, 0.98, 21.48, false, 14, 15, 1, 12.47, 2.32, 4.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 1, 'AXM477', 23.76, 0.98, 21.47, false, 27, 20, 2, 8.70, 1.85, 8.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 5, 'AXM477', 24.39, 1.01, 21.92, false, 2, 13, 0, 19.59, 1.93, 17.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 9, 'AXM477', 24.42, 1.02, 21.60, false, 15, 14, 3, 19.82, 1.58, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 13, 'AXM477', 23.85, 1.02, 21.05, false, 8, 7, 0, 9.02, 2.25, 4.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 17, 'AXM477', 24.41, 1.01, 21.22, false, 13, 16, 1, 11.23, 2.38, 11.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 1, 'AXM477', 25.32, 9.64, 25.37, false, 11, 18, 2, 8.89, 2.53, 8.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 5, 'AXM477', 26.32, 10.05, 24.19, false, 10, 6, 1, 18.42, 2.42, 16.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 9, 'AXM477', 27.24, 10.38, 25.10, false, 10, 6, 2, 14.92, 2.57, 7.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 13, 'AXM477', 24.79, 10.18, 24.66, false, 2, 4, 1, 9.04, 1.93, 3.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'A', 17, 'AXM477', 27.11, 9.93, 24.11, false, 6, 5, 0, 15.36, 2.42, 5.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 1, 'AXM477', 26.99, 10.46, 25.03, false, 42, 2, 4, 8.70, 2.21, 8.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 5, 'AXM477', 24.49, 9.84, 25.39, false, 9, 8, 2, 10.57, 2.16, 3.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 9, 'AXM477', 24.68, 9.89, 25.31, false, 1, 1, 0, 17.06, 1.99, 13.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 13, 'AXM477', 24.86, 10.26, 24.95, false, 13, 13, 1, 13.98, 1.66, 11.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'B', 17, 'AXM477', 25.35, 10.15, 24.71, false, 16, 15, 1, 12.48, 2.64, 4.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 1, 'AXM477', 24.06, 9.74, 24.75, false, 29, 20, 2, 8.77, 2.20, 8.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 5, 'AXM477', 28.30, 10.31, 24.44, false, 2, 13, 0, 19.77, 2.28, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 9, 'AXM477', 28.19, 10.12, 24.32, false, 15, 15, 4, 19.93, 1.93, 8.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 13, 'AXM477', 27.76, 10.36, 25.46, false, 10, 8, 0, 9.14, 2.65, 4.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '12:00:00', 'C', 17, 'AXM477', 27.18, 10.18, 24.76, false, 14, 16, 1, 11.25, 2.65, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 1, 'AXM477', 28.10, 8.83, 26.45, false, 11, 19, 2, 8.95, 2.57, 8.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 5, 'AXM477', 30.16, 8.98, 26.51, false, 10, 7, 1, 18.57, 2.74, 16.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 9, 'AXM477', 27.94, 7.89, 27.07, false, 12, 7, 3, 14.95, 2.91, 7.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 13, 'AXM477', 25.62, 8.28, 27.05, false, 2, 4, 1, 9.13, 2.21, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'A', 17, 'AXM477', 28.85, 8.87, 27.30, false, 8, 6, 1, 15.55, 2.63, 6.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 1, 'AXM477', 30.97, 8.40, 26.69, false, 42, 2, 4, 8.78, 2.41, 8.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 5, 'AXM477', 25.32, 7.57, 26.19, false, 9, 9, 3, 10.69, 2.35, 3.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 9, 'AXM477', 25.26, 7.88, 26.39, false, 2, 2, 1, 17.16, 2.12, 14.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 13, 'AXM477', 28.79, 8.60, 26.35, false, 13, 13, 2, 14.17, 1.71, 11.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'B', 17, 'AXM477', 27.14, 7.03, 26.16, false, 18, 15, 2, 12.65, 2.72, 4.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 1, 'AXM477', 24.90, 8.68, 26.64, false, 30, 20, 3, 8.80, 2.39, 8.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 5, 'AXM477', 29.69, 7.37, 26.62, false, 3, 14, 0, 19.89, 2.56, 17.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 9, 'AXM477', 31.14, 8.86, 26.80, false, 17, 15, 5, 20.04, 2.01, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 13, 'AXM477', 31.37, 7.71, 27.22, false, 10, 8, 0, 9.21, 3.04, 4.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '16:00:00', 'C', 17, 'AXM477', 30.21, 7.46, 26.75, false, 16, 16, 1, 11.41, 2.67, 11.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 1, 'AXM477', 32.06, 0.51, 22.22, false, 11, 19, 3, 8.98, 2.61, 8.17, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 5, 'AXM477', 31.19, 0.50, 22.43, false, 12, 7, 1, 18.72, 3.08, 17.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 9, 'AXM477', 29.48, 0.51, 22.11, false, 13, 8, 3, 15.13, 3.08, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 13, 'AXM477', 26.83, 0.52, 22.20, false, 4, 5, 2, 9.15, 2.61, 3.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'A', 17, 'AXM477', 30.44, 0.50, 22.40, false, 10, 6, 1, 15.56, 2.86, 6.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 1, 'AXM477', 33.39, 0.49, 22.26, false, 42, 3, 4, 8.83, 2.81, 8.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 5, 'AXM477', 28.80, 0.50, 22.18, false, 10, 10, 4, 10.75, 2.53, 3.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 9, 'AXM477', 26.51, 0.53, 22.29, false, 4, 2, 2, 17.30, 2.43, 14.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 13, 'AXM477', 32.26, 0.52, 22.38, false, 15, 13, 2, 14.26, 2.05, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'B', 17, 'AXM477', 29.30, 0.53, 22.41, false, 19, 15, 3, 12.70, 2.73, 4.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 1, 'AXM477', 26.40, 0.53, 22.16, false, 32, 20, 3, 8.92, 2.73, 8.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 5, 'AXM477', 33.55, 0.52, 22.42, false, 4, 14, 1, 19.92, 2.70, 17.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 9, 'AXM477', 31.65, 0.49, 22.42, false, 19, 15, 6, 20.05, 2.18, 8.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 13, 'AXM477', 32.62, 0.47, 22.44, false, 12, 9, 0, 9.32, 3.19, 4.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 17, 'AXM477', 32.27, 0.49, 22.21, false, 17, 17, 1, 11.58, 2.83, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 1, 'AXM477', 24.12, 0.98, 20.62, false, 44, 13, 0, 17.42, 3.97, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 5, 'AXM477', 24.17, 1.03, 20.66, false, 45, 20, 6, 18.93, 4.50, 6.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 9, 'AXM477', 24.04, 0.99, 21.67, false, 35, 13, 4, 11.66, 3.93, 11.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 13, 'AXM477', 23.66, 1.02, 20.56, false, 73, 20, 3, 10.61, 4.00, 7.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'A', 17, 'AXM477', 23.84, 1.00, 21.12, false, 51, 13, 3, 18.40, 4.21, 16.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 1, 'AXM477', 23.98, 1.02, 20.71, false, 54, 15, 6, 14.13, 4.04, 10.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 5, 'AXM477', 23.64, 0.97, 21.62, false, 13, 4, 1, 21.92, 3.92, 16.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 9, 'AXM477', 24.43, 1.00, 21.01, false, 71, 18, 10, 9.41, 4.35, 7.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 13, 'AXM477', 24.34, 1.03, 20.60, false, 29, 8, 3, 17.97, 3.70, 16.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'B', 17, 'AXM477', 24.03, 1.00, 20.02, false, 13, 6, 2, 9.16, 3.91, 7.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 1, 'AXM477', 23.91, 1.01, 21.71, false, 12, 4, 2, 17.90, 4.14, 14.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 5, 'AXM477', 24.42, 1.02, 21.04, false, 34, 17, 2, 15.25, 3.65, 15.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 9, 'AXM477', 24.03, 1.00, 20.97, false, 53, 18, 10, 21.32, 3.86, 6.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 13, 'AXM477', 23.86, 1.02, 20.11, false, 28, 8, 4, 14.02, 3.76, 6.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '08:00:00', 'C', 17, 'AXM477', 24.21, 0.99, 20.86, false, 31, 11, 2, 10.62, 3.83, 10.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 1, 'AXM477', 25.44, 9.85, 24.67, false, 44, 13, 0, 17.51, 4.15, 7.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 5, 'AXM477', 24.17, 9.75, 25.75, false, 47, 20, 6, 19.08, 4.90, 6.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 9, 'AXM477', 24.09, 9.95, 24.71, false, 36, 13, 4, 11.76, 4.23, 11.48, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 13, 'AXM477', 24.30, 10.23, 25.36, false, 75, 20, 3, 10.63, 4.11, 7.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'A', 17, 'AXM477', 26.71, 9.66, 24.99, false, 51, 14, 3, 18.57, 4.42, 16.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 1, 'AXM477', 27.05, 10.13, 24.37, false, 55, 16, 7, 14.28, 4.12, 10.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 5, 'AXM477', 24.59, 10.50, 24.01, false, 14, 4, 2, 22.00, 3.96, 16.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 9, 'AXM477', 25.40, 9.63, 24.28, false, 73, 19, 10, 9.55, 4.55, 7.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 13, 'AXM477', 26.94, 10.06, 24.95, false, 30, 9, 4, 18.09, 3.74, 16.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'B', 17, 'AXM477', 24.25, 9.95, 24.31, false, 15, 6, 2, 9.18, 4.30, 7.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 1, 'AXM477', 25.03, 10.17, 24.94, false, 13, 5, 2, 17.93, 4.26, 14.09, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 5, 'AXM477', 26.40, 9.54, 24.92, false, 35, 18, 2, 15.30, 3.69, 15.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 9, 'AXM477', 25.08, 9.68, 24.14, false, 55, 18, 10, 21.48, 3.98, 7.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 13, 'AXM477', 25.21, 9.82, 25.36, false, 29, 8, 4, 14.05, 4.15, 6.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '12:00:00', 'C', 17, 'AXM477', 24.84, 10.08, 25.32, false, 33, 12, 3, 10.80, 4.05, 10.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 1, 'AXM477', 27.59, 8.29, 27.42, false, 45, 14, 1, 17.63, 4.53, 7.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 5, 'AXM477', 27.39, 7.68, 26.86, false, 48, 20, 6, 19.18, 5.03, 7.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 9, 'AXM477', 26.84, 8.78, 27.05, false, 36, 13, 5, 11.92, 4.29, 11.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 13, 'AXM477', 27.50, 7.70, 26.73, false, 77, 20, 4, 10.71, 4.41, 7.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'A', 17, 'AXM477', 27.51, 8.79, 26.52, false, 52, 14, 4, 18.64, 4.66, 16.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 1, 'AXM477', 27.84, 8.98, 26.43, false, 55, 16, 7, 14.37, 4.22, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 5, 'AXM477', 25.05, 7.60, 26.85, false, 14, 5, 3, 22.07, 4.14, 16.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 9, 'AXM477', 27.16, 8.38, 26.07, false, 75, 20, 10, 9.70, 4.57, 7.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 13, 'AXM477', 30.87, 7.73, 26.08, false, 31, 10, 5, 18.26, 3.83, 16.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'B', 17, 'AXM477', 25.92, 7.81, 27.10, false, 17, 6, 2, 9.26, 4.48, 7.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 1, 'AXM477', 28.03, 8.21, 26.26, false, 15, 5, 3, 18.02, 4.31, 14.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 5, 'AXM477', 27.44, 8.49, 26.68, false, 37, 19, 3, 15.43, 3.76, 15.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 9, 'AXM477', 26.61, 7.07, 26.49, false, 57, 18, 10, 21.55, 4.26, 7.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 13, 'AXM477', 26.04, 8.88, 26.96, false, 30, 9, 4, 14.19, 4.15, 6.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 17, 'AXM477', 26.34, 8.71, 26.73, false, 35, 13, 4, 10.95, 4.21, 10.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 1, 'AXM477', 28.75, 0.50, 22.18, false, 47, 15, 1, 17.75, 4.92, 7.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 5, 'AXM477', 29.10, 0.49, 22.45, false, 48, 20, 6, 19.21, 5.40, 7.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 9, 'AXM477', 28.36, 0.49, 22.09, false, 38, 14, 5, 11.99, 4.34, 11.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 13, 'AXM477', 31.35, 0.49, 22.41, false, 77, 20, 4, 10.84, 4.61, 7.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'A', 17, 'AXM477', 28.46, 0.49, 22.11, false, 52, 14, 4, 18.69, 4.91, 16.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 1, 'AXM477', 29.21, 0.50, 22.08, false, 56, 17, 8, 14.53, 4.34, 10.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 5, 'AXM477', 26.16, 0.50, 22.14, false, 14, 5, 3, 22.15, 4.24, 16.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 9, 'AXM477', 29.48, 0.49, 22.08, false, 76, 20, 10, 9.76, 4.58, 7.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 13, 'AXM477', 33.78, 0.52, 22.28, false, 32, 10, 5, 18.39, 4.19, 16.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'B', 17, 'AXM477', 29.57, 0.48, 22.19, false, 19, 6, 2, 9.36, 4.78, 7.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 1, 'AXM477', 31.62, 0.48, 22.13, false, 17, 6, 3, 18.12, 4.53, 14.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 5, 'AXM477', 30.35, 0.53, 22.34, false, 37, 20, 4, 15.46, 3.93, 15.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 9, 'AXM477', 29.32, 0.53, 22.09, false, 58, 19, 10, 21.60, 4.54, 7.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 13, 'AXM477', 27.51, 0.51, 22.14, false, 30, 9, 4, 14.36, 4.28, 6.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '20:00:00', 'C', 17, 'AXM477', 27.70, 0.52, 22.37, false, 35, 14, 5, 10.95, 4.50, 10.38, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 1, 'AXM477', 24.12, 1.00, 20.17, false, 62, 15, 13, 16.04, 5.53, 12.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 5, 'AXM477', 24.15, 0.99, 21.90, false, 70, 19, 7, 16.18, 5.74, 7.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 9, 'AXM477', 24.46, 0.99, 20.73, false, 31, 9, 6, 21.63, 5.78, 17.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 13, 'AXM477', 23.95, 1.02, 21.02, false, 62, 17, 4, 20.24, 5.86, 14.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'A', 17, 'AXM477', 23.87, 1.01, 20.05, false, 43, 14, 5, 12.72, 6.43, 8.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 1, 'AXM477', 24.15, 1.00, 20.26, false, 70, 17, 11, 14.83, 6.06, 11.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 5, 'AXM477', 24.31, 1.01, 20.62, false, 48, 13, 6, 21.17, 6.15, 14.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 9, 'AXM477', 23.99, 1.02, 21.50, false, 32, 9, 3, 14.15, 5.87, 11.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 13, 'AXM477', 24.32, 1.00, 20.67, false, 48, 10, 2, 16.47, 5.53, 10.03, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'B', 17, 'AXM477', 23.75, 0.97, 21.84, false, 82, 20, 6, 16.39, 5.55, 6.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 1, 'AXM477', 24.36, 1.01, 20.37, false, 23, 7, 5, 11.82, 5.50, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 5, 'AXM477', 24.27, 0.99, 21.31, false, 31, 9, 7, 20.18, 6.15, 8.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 9, 'AXM477', 24.05, 1.01, 21.47, false, 59, 15, 1, 13.06, 5.68, 7.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 13, 'AXM477', 23.63, 1.01, 20.71, false, 49, 16, 5, 22.26, 6.48, 12.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '08:00:00', 'C', 17, 'AXM477', 24.34, 0.99, 20.73, false, 55, 14, 1, 17.10, 6.04, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 1, 'AXM477', 27.87, 10.46, 25.44, false, 62, 16, 14, 16.09, 5.89, 12.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 5, 'AXM477', 25.95, 9.73, 25.41, false, 71, 19, 8, 16.21, 5.78, 7.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 9, 'AXM477', 25.32, 9.90, 25.53, false, 31, 9, 7, 21.70, 6.01, 17.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 13, 'AXM477', 27.44, 10.45, 26.11, false, 63, 17, 5, 20.30, 5.95, 14.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'A', 17, 'AXM477', 27.30, 10.33, 24.49, false, 43, 14, 5, 12.81, 6.81, 8.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 1, 'AXM477', 26.99, 10.14, 24.36, false, 71, 18, 11, 14.89, 6.37, 11.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 5, 'AXM477', 26.27, 9.90, 24.34, false, 48, 13, 6, 21.29, 6.53, 14.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 9, 'AXM477', 27.40, 9.87, 25.87, false, 32, 9, 4, 14.35, 5.94, 11.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 13, 'AXM477', 28.05, 9.67, 25.20, false, 50, 10, 3, 16.62, 5.81, 10.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'B', 17, 'AXM477', 27.49, 9.91, 24.42, false, 83, 20, 6, 16.43, 5.77, 6.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 1, 'AXM477', 25.20, 10.20, 25.72, false, 24, 8, 5, 11.89, 5.61, 11.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 5, 'AXM477', 26.26, 10.48, 24.27, false, 33, 10, 8, 20.23, 6.52, 8.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 9, 'AXM477', 27.97, 9.77, 24.25, false, 61, 15, 1, 13.22, 5.95, 7.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 13, 'AXM477', 27.38, 9.99, 24.38, false, 50, 16, 5, 22.43, 6.67, 12.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 17, 'AXM477', 24.59, 10.34, 24.85, false, 57, 14, 2, 17.20, 6.30, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 1, 'AXM477', 31.17, 7.49, 26.43, false, 62, 16, 15, 16.23, 5.90, 12.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 5, 'AXM477', 29.83, 7.16, 26.24, false, 72, 20, 8, 16.27, 6.04, 7.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 9, 'AXM477', 27.09, 8.07, 26.31, false, 33, 10, 7, 21.79, 6.05, 17.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 13, 'AXM477', 28.44, 8.72, 26.09, false, 65, 18, 5, 20.41, 6.14, 14.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'A', 17, 'AXM477', 27.58, 7.33, 26.03, false, 43, 15, 5, 12.92, 7.00, 8.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 1, 'AXM477', 30.62, 7.89, 27.04, false, 73, 19, 11, 14.99, 6.47, 11.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 5, 'AXM477', 27.67, 8.53, 26.16, false, 48, 14, 7, 21.41, 6.64, 14.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 9, 'AXM477', 29.53, 7.86, 26.45, false, 33, 9, 4, 14.41, 6.09, 11.23, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 13, 'AXM477', 30.68, 7.78, 26.66, false, 51, 10, 3, 16.66, 6.13, 10.16, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'B', 17, 'AXM477', 28.97, 8.80, 26.93, false, 84, 20, 6, 16.45, 5.90, 6.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 1, 'AXM477', 27.81, 8.19, 26.18, false, 26, 8, 5, 12.07, 5.80, 11.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 5, 'AXM477', 29.41, 8.77, 27.47, false, 33, 11, 8, 20.27, 6.88, 8.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 9, 'AXM477', 31.21, 8.63, 26.43, false, 61, 15, 1, 13.27, 6.29, 7.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 13, 'AXM477', 27.74, 7.61, 26.11, false, 51, 17, 6, 22.59, 6.72, 12.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '16:00:00', 'C', 17, 'AXM477', 26.50, 8.45, 27.55, false, 58, 14, 2, 17.23, 6.61, 8.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 1, 'AXM477', 33.57, 0.52, 22.04, false, 64, 16, 16, 16.42, 6.07, 12.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 5, 'AXM477', 29.84, 0.53, 22.39, false, 73, 20, 8, 16.39, 6.20, 7.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 9, 'AXM477', 30.93, 0.50, 22.38, false, 35, 10, 7, 21.92, 6.32, 17.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 13, 'AXM477', 31.55, 0.49, 22.45, false, 65, 19, 6, 20.60, 6.49, 14.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'A', 17, 'AXM477', 29.73, 0.50, 22.27, false, 43, 16, 6, 12.97, 7.30, 8.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 1, 'AXM477', 34.38, 0.52, 22.53, false, 75, 19, 11, 15.09, 6.79, 11.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 5, 'AXM477', 28.89, 0.53, 22.42, false, 48, 14, 8, 21.49, 6.76, 14.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 9, 'AXM477', 31.16, 0.51, 22.52, false, 33, 10, 4, 14.45, 6.20, 11.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 13, 'AXM477', 34.05, 0.50, 22.44, false, 51, 11, 3, 16.85, 6.17, 10.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'B', 17, 'AXM477', 29.25, 0.49, 22.46, false, 85, 20, 7, 16.59, 6.21, 6.21, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 1, 'AXM477', 31.05, 0.51, 22.07, false, 26, 9, 5, 12.08, 6.02, 11.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 5, 'AXM477', 29.68, 0.52, 22.17, false, 33, 11, 9, 20.39, 7.07, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 9, 'AXM477', 35.09, 0.50, 22.16, false, 62, 16, 1, 13.28, 6.42, 7.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 13, 'AXM477', 29.61, 0.49, 22.39, false, 53, 18, 7, 22.77, 6.94, 12.34, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '20:00:00', 'C', 17, 'AXM477', 29.17, 0.49, 22.17, false, 60, 15, 2, 17.36, 6.67, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 1, 'AXM477', 23.82, 1.03, 21.47, false, 90, 17, 6, 25.46, 8.28, 18.22, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 5, 'AXM477', 23.58, 0.97, 21.19, false, 111, 16, 12, 21.77, 7.95, 11.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 9, 'AXM477', 24.37, 0.97, 21.73, false, 117, 20, 4, 19.77, 7.67, 10.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 13, 'AXM477', 24.33, 1.00, 20.39, false, 88, 13, 16, 21.29, 8.09, 8.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'A', 17, 'AXM477', 24.44, 0.97, 21.38, false, 65, 11, 7, 14.28, 8.05, 8.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 1, 'AXM477', 24.23, 1.03, 22.04, false, 120, 18, 11, 24.31, 7.87, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 5, 'AXM477', 23.55, 1.00, 21.21, false, 61, 10, 13, 25.16, 8.43, 17.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 9, 'AXM477', 24.29, 1.03, 21.43, false, 122, 20, 2, 16.89, 7.80, 14.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 13, 'AXM477', 23.58, 1.01, 20.48, false, 71, 13, 14, 23.35, 8.45, 14.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'B', 17, 'AXM477', 23.63, 0.98, 20.26, false, 101, 18, 21, 13.22, 7.69, 8.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 1, 'AXM477', 24.42, 1.00, 21.67, false, 113, 20, 12, 18.05, 8.08, 15.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 5, 'AXM477', 24.37, 1.03, 21.59, false, 109, 20, 22, 14.69, 8.11, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 9, 'AXM477', 24.21, 1.00, 21.20, false, 53, 10, 12, 17.05, 8.36, 15.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 13, 'AXM477', 24.40, 1.02, 21.30, false, 111, 20, 19, 17.41, 7.60, 9.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 17, 'AXM477', 24.46, 0.99, 21.81, false, 92, 18, 14, 19.01, 7.98, 8.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 1, 'AXM477', 26.73, 10.29, 25.88, false, 92, 17, 6, 25.49, 8.33, 18.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 5, 'AXM477', 25.29, 10.22, 26.08, false, 113, 17, 13, 21.88, 8.12, 11.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 9, 'AXM477', 24.44, 10.44, 25.59, false, 118, 20, 4, 19.92, 7.88, 10.74, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 13, 'AXM477', 27.25, 10.20, 25.14, false, 90, 13, 17, 21.43, 8.20, 9.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'A', 17, 'AXM477', 28.28, 10.41, 25.36, false, 67, 12, 8, 14.47, 8.09, 8.20, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 1, 'AXM477', 26.06, 10.17, 24.90, false, 120, 18, 11, 24.45, 7.89, 14.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 5, 'AXM477', 26.91, 10.02, 24.59, false, 63, 11, 14, 25.34, 8.80, 17.37, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 9, 'AXM477', 25.15, 9.58, 25.83, false, 124, 20, 3, 17.03, 7.91, 15.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 13, 'AXM477', 26.39, 10.29, 24.98, false, 71, 14, 14, 23.45, 8.56, 14.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'B', 17, 'AXM477', 24.87, 10.01, 25.54, false, 101, 19, 22, 13.33, 7.79, 8.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 1, 'AXM477', 27.19, 9.51, 24.58, false, 113, 20, 12, 18.09, 8.46, 15.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 5, 'AXM477', 27.09, 10.22, 25.94, false, 109, 20, 22, 14.87, 8.45, 11.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 9, 'AXM477', 24.45, 9.85, 25.28, false, 54, 10, 13, 17.07, 8.65, 15.95, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 13, 'AXM477', 27.61, 9.86, 24.90, false, 112, 20, 19, 17.55, 7.92, 9.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '12:00:00', 'C', 17, 'AXM477', 24.56, 9.76, 25.54, false, 92, 18, 14, 19.14, 8.10, 8.89, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 1, 'AXM477', 28.15, 8.69, 26.18, false, 94, 17, 7, 25.59, 8.43, 18.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 5, 'AXM477', 27.85, 8.84, 27.73, false, 114, 17, 13, 22.02, 8.52, 11.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 9, 'AXM477', 25.53, 7.79, 26.51, false, 120, 20, 5, 20.09, 8.00, 10.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 13, 'AXM477', 29.67, 8.90, 26.26, false, 92, 14, 18, 21.47, 8.35, 9.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'A', 17, 'AXM477', 29.82, 8.23, 26.79, false, 69, 13, 8, 14.66, 8.16, 8.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 1, 'AXM477', 26.93, 7.18, 26.53, false, 121, 19, 12, 24.62, 8.19, 14.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 5, 'AXM477', 30.35, 8.54, 27.40, false, 63, 11, 14, 25.51, 8.95, 17.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 9, 'AXM477', 26.66, 7.78, 27.33, false, 124, 20, 3, 17.19, 8.25, 15.12, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 13, 'AXM477', 29.40, 8.76, 27.59, false, 72, 15, 15, 23.47, 8.69, 14.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'B', 17, 'AXM477', 26.73, 8.89, 27.19, false, 101, 19, 23, 13.35, 7.92, 8.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 1, 'AXM477', 31.07, 7.06, 26.10, false, 115, 20, 13, 18.25, 8.61, 15.86, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 5, 'AXM477', 30.74, 7.81, 26.26, false, 110, 20, 23, 15.06, 8.81, 11.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 9, 'AXM477', 25.11, 8.23, 27.16, false, 56, 11, 13, 17.13, 8.79, 16.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 13, 'AXM477', 30.25, 7.79, 26.30, false, 113, 20, 20, 17.56, 7.94, 9.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '16:00:00', 'C', 17, 'AXM477', 26.31, 7.11, 26.79, false, 92, 19, 15, 19.33, 8.29, 8.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 1, 'AXM477', 29.16, 0.47, 22.32, false, 96, 18, 8, 25.74, 8.50, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 5, 'AXM477', 30.19, 0.52, 22.19, false, 116, 17, 14, 22.09, 8.55, 11.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 9, 'AXM477', 26.34, 0.50, 22.19, false, 120, 20, 6, 20.19, 8.20, 10.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 13, 'AXM477', 32.29, 0.47, 22.06, false, 94, 14, 19, 21.60, 8.61, 9.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'A', 17, 'AXM477', 30.65, 0.52, 22.04, false, 71, 14, 9, 14.68, 8.51, 8.51, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 1, 'AXM477', 27.06, 0.52, 22.40, false, 123, 19, 12, 24.81, 8.34, 14.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 5, 'AXM477', 31.94, 0.48, 22.38, false, 63, 11, 15, 25.55, 9.20, 17.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 9, 'AXM477', 30.16, 0.52, 22.11, false, 125, 20, 3, 17.29, 8.47, 15.15, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 13, 'AXM477', 30.23, 0.49, 22.25, false, 74, 15, 15, 23.49, 8.93, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'B', 17, 'AXM477', 30.69, 0.48, 22.06, false, 101, 20, 23, 13.54, 8.22, 8.60, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 1, 'AXM477', 33.88, 0.53, 22.33, false, 116, 20, 13, 18.25, 8.77, 15.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 5, 'AXM477', 31.91, 0.48, 22.37, false, 112, 20, 24, 15.25, 9.17, 11.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 9, 'AXM477', 26.94, 0.52, 22.19, false, 56, 12, 14, 17.15, 8.95, 16.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 13, 'AXM477', 33.03, 0.50, 22.47, false, 114, 20, 20, 17.69, 8.00, 9.97, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 17, 'AXM477', 26.84, 0.51, 22.25, false, 93, 19, 16, 19.51, 8.66, 9.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 1, 'AXM477', 23.94, 0.97, 21.25, false, 183, 20, 38, 23.54, 11.51, 19.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 5, 'AXM477', 24.32, 0.98, 20.86, false, 194, 20, 23, 23.63, 12.26, 18.68, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 9, 'AXM477', 24.10, 1.02, 21.21, false, 113, 12, 19, 27.45, 11.78, 19.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 13, 'AXM477', 23.53, 1.03, 20.15, false, 182, 20, 28, 29.58, 11.85, 29.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'A', 17, 'AXM477', 24.11, 1.01, 20.59, false, 159, 19, 33, 28.16, 11.62, 20.67, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 1, 'AXM477', 23.89, 0.98, 21.35, false, 191, 20, 29, 19.07, 12.07, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 5, 'AXM477', 23.73, 1.00, 20.61, false, 190, 20, 38, 17.98, 11.91, 12.87, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 9, 'AXM477', 24.15, 1.01, 20.24, false, 197, 20, 23, 21.64, 12.42, 15.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 13, 'AXM477', 24.46, 0.99, 21.09, false, 135, 14, 6, 21.25, 11.53, 16.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'B', 17, 'AXM477', 24.45, 0.99, 20.85, false, 183, 19, 29, 18.33, 11.93, 13.13, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 1, 'AXM477', 24.17, 1.00, 21.07, false, 187, 19, 3, 23.25, 12.38, 21.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 5, 'AXM477', 24.44, 1.02, 20.60, false, 177, 20, 22, 22.40, 11.89, 13.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 9, 'AXM477', 23.77, 1.03, 20.03, false, 163, 20, 2, 24.86, 12.42, 14.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 13, 'AXM477', 23.96, 0.98, 21.06, false, 110, 13, 4, 25.14, 11.52, 21.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '08:00:00', 'C', 17, 'AXM477', 23.60, 1.02, 20.25, false, 168, 20, 3, 24.35, 12.22, 14.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 1, 'AXM477', 24.52, 9.79, 24.00, false, 184, 20, 39, 23.62, 11.73, 19.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 5, 'AXM477', 24.91, 10.16, 24.96, false, 195, 20, 24, 23.65, 12.42, 18.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 9, 'AXM477', 27.42, 9.85, 25.57, false, 115, 12, 20, 27.52, 11.89, 19.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 13, 'AXM477', 26.88, 10.45, 24.62, false, 184, 20, 28, 29.61, 11.96, 29.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'A', 17, 'AXM477', 26.87, 9.85, 25.72, false, 160, 19, 34, 28.34, 11.72, 20.70, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 1, 'AXM477', 26.24, 10.24, 24.66, false, 191, 20, 29, 19.22, 12.08, 13.24, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 5, 'AXM477', 24.68, 9.68, 25.21, false, 190, 20, 39, 18.15, 12.29, 12.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 9, 'AXM477', 27.49, 10.14, 26.01, false, 199, 20, 23, 21.70, 12.74, 15.81, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 13, 'AXM477', 27.75, 9.77, 25.73, false, 137, 14, 6, 21.29, 11.93, 16.88, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'B', 17, 'AXM477', 27.12, 10.15, 24.33, false, 183, 19, 30, 18.41, 12.16, 13.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 1, 'AXM477', 27.75, 10.17, 24.17, false, 189, 19, 3, 23.36, 12.53, 21.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 5, 'AXM477', 24.63, 9.77, 24.62, false, 178, 20, 23, 22.51, 12.22, 13.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 9, 'AXM477', 26.25, 10.49, 24.36, false, 163, 20, 3, 24.96, 12.61, 14.71, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 13, 'AXM477', 26.35, 9.93, 25.81, false, 111, 13, 5, 25.23, 11.72, 21.61, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '12:00:00', 'C', 17, 'AXM477', 25.36, 10.23, 24.18, false, 169, 20, 3, 24.49, 12.49, 14.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 1, 'AXM477', 26.05, 8.75, 27.61, false, 186, 20, 39, 23.64, 11.91, 19.53, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 5, 'AXM477', 25.83, 8.90, 27.17, false, 195, 20, 24, 23.76, 12.77, 18.77, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 9, 'AXM477', 29.86, 8.32, 26.21, false, 115, 12, 20, 27.56, 12.15, 20.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 13, 'AXM477', 27.71, 8.91, 27.41, false, 185, 20, 28, 29.80, 12.33, 29.27, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'A', 17, 'AXM477', 30.77, 7.49, 26.22, false, 160, 20, 35, 28.49, 12.04, 20.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 1, 'AXM477', 27.02, 7.44, 26.84, false, 193, 20, 29, 19.36, 12.30, 13.26, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 5, 'AXM477', 26.30, 7.33, 26.55, false, 191, 20, 40, 18.28, 12.59, 12.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 9, 'AXM477', 29.75, 7.34, 26.40, false, 201, 20, 23, 21.84, 12.81, 15.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 13, 'AXM477', 29.06, 7.03, 26.87, false, 138, 14, 7, 21.30, 12.16, 16.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'B', 17, 'AXM477', 28.26, 7.10, 26.74, false, 185, 20, 31, 18.60, 12.20, 13.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 1, 'AXM477', 29.69, 7.35, 26.54, false, 189, 20, 4, 23.46, 12.69, 21.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 5, 'AXM477', 28.55, 7.82, 27.25, false, 179, 20, 24, 22.59, 12.41, 13.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 9, 'AXM477', 27.01, 8.77, 26.86, false, 164, 20, 3, 25.00, 12.85, 14.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 13, 'AXM477', 29.77, 7.83, 26.73, false, 111, 14, 6, 25.27, 11.79, 21.62, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 17, 'AXM477', 27.22, 7.22, 26.02, false, 169, 20, 4, 24.56, 12.79, 14.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 1, 'AXM477', 26.55, 0.52, 22.10, false, 188, 20, 39, 23.75, 11.94, 19.58, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 5, 'AXM477', 26.95, 0.50, 22.40, false, 196, 20, 24, 23.93, 12.89, 18.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 9, 'AXM477', 30.45, 0.48, 22.17, false, 116, 12, 21, 27.72, 12.23, 20.05, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 13, 'AXM477', 29.09, 0.49, 22.15, false, 186, 20, 29, 29.85, 12.57, 29.28, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'A', 17, 'AXM477', 33.86, 0.47, 22.34, false, 161, 20, 36, 28.53, 12.06, 20.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 1, 'AXM477', 30.58, 0.47, 22.36, false, 195, 20, 29, 19.39, 12.61, 13.32, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 5, 'AXM477', 26.67, 0.48, 22.18, false, 191, 20, 41, 18.37, 12.62, 13.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 9, 'AXM477', 32.84, 0.47, 22.40, false, 201, 20, 24, 22.02, 12.89, 15.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 13, 'AXM477', 29.93, 0.52, 22.30, false, 140, 15, 8, 21.36, 12.40, 17.00, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'B', 17, 'AXM477', 31.55, 0.51, 22.26, false, 187, 20, 32, 18.71, 12.38, 13.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 1, 'AXM477', 32.04, 0.48, 22.23, false, 190, 20, 4, 23.66, 13.06, 21.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 5, 'AXM477', 31.72, 0.52, 22.50, false, 179, 20, 24, 22.67, 12.63, 13.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 9, 'AXM477', 28.56, 0.51, 22.40, false, 166, 20, 3, 25.04, 13.10, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 13, 'AXM477', 30.13, 0.53, 22.01, false, 112, 14, 6, 25.37, 12.08, 21.63, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '20:00:00', 'C', 17, 'AXM477', 27.97, 0.50, 22.22, false, 170, 20, 4, 24.60, 13.18, 14.79, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 1, 'AXM477', 24.39, 1.01, 20.05, false, 249, 20, 3, 25.59, 16.03, 16.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 5, 'AXM477', 23.56, 0.99, 21.34, false, 236, 20, 45, 26.93, 16.26, 19.80, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 9, 'AXM477', 24.30, 1.00, 21.39, false, 154, 12, 21, 24.44, 15.68, 19.85, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 13, 'AXM477', 24.29, 0.99, 20.88, false, 238, 20, 14, 26.03, 15.55, 18.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'A', 17, 'AXM477', 23.99, 1.01, 20.88, false, 243, 19, 34, 25.51, 15.83, 22.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 1, 'AXM477', 23.56, 1.02, 20.66, false, 253, 20, 27, 28.51, 15.82, 20.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 5, 'AXM477', 24.40, 1.01, 20.99, false, 230, 20, 10, 27.00, 15.61, 18.94, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 9, 'AXM477', 23.87, 0.98, 21.80, false, 246, 20, 43, 24.96, 15.58, 22.65, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 13, 'AXM477', 24.02, 1.01, 20.87, false, 155, 14, 29, 30.91, 16.04, 29.96, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'B', 17, 'AXM477', 23.54, 0.99, 21.54, false, 236, 19, 20, 31.11, 16.25, 29.91, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 1, 'AXM477', 24.27, 1.02, 21.15, false, 234, 19, 49, 31.18, 16.32, 30.36, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 5, 'AXM477', 23.69, 0.99, 21.06, false, 230, 20, 15, 30.05, 16.50, 28.41, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 9, 'AXM477', 23.75, 1.02, 21.02, false, 221, 20, 35, 32.69, 16.29, 21.92, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 13, 'AXM477', 23.63, 1.01, 20.72, false, 161, 13, 26, 21.83, 15.94, 17.40, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '08:00:00', 'C', 17, 'AXM477', 24.19, 0.99, 21.44, false, 229, 20, 23, 26.65, 16.49, 16.69, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 1, 'AXM477', 25.58, 10.34, 25.47, false, 250, 20, 3, 25.60, 16.18, 17.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 5, 'AXM477', 27.43, 10.16, 24.78, false, 238, 20, 46, 27.05, 16.62, 19.82, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 9, 'AXM477', 27.63, 9.82, 24.67, false, 155, 12, 21, 24.60, 15.96, 19.93, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 13, 'AXM477', 26.35, 10.03, 24.38, false, 240, 20, 15, 26.07, 15.85, 18.30, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'A', 17, 'AXM477', 27.39, 9.72, 24.20, false, 244, 19, 34, 25.66, 16.07, 22.29, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 1, 'AXM477', 24.03, 9.61, 25.78, false, 255, 20, 27, 28.53, 16.18, 20.39, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 5, 'AXM477', 25.12, 9.76, 24.79, false, 231, 20, 11, 27.14, 15.67, 18.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 9, 'AXM477', 27.10, 9.87, 25.12, false, 246, 20, 43, 25.00, 15.95, 22.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 13, 'AXM477', 25.59, 9.94, 25.71, false, 157, 14, 29, 31.06, 16.31, 30.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'B', 17, 'AXM477', 25.25, 10.07, 25.03, false, 237, 19, 21, 31.28, 16.36, 30.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 1, 'AXM477', 28.18, 10.41, 24.09, false, 235, 19, 49, 31.32, 16.36, 30.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 5, 'AXM477', 25.52, 9.51, 25.01, false, 231, 20, 15, 30.08, 16.72, 28.50, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 9, 'AXM477', 25.82, 9.98, 24.28, false, 222, 20, 35, 32.71, 16.62, 21.98, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 13, 'AXM477', 24.71, 10.25, 25.58, false, 162, 13, 27, 21.94, 16.18, 17.47, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 17, 'AXM477', 26.46, 10.48, 24.06, false, 231, 20, 24, 26.65, 16.65, 16.72, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 1, 'AXM477', 29.10, 8.18, 27.16, false, 251, 20, 4, 25.73, 16.57, 17.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 5, 'AXM477', 28.29, 7.74, 26.43, false, 240, 20, 46, 27.09, 16.63, 19.83, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 9, 'AXM477', 28.74, 7.05, 26.55, false, 155, 12, 22, 24.71, 16.03, 19.99, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 13, 'AXM477', 29.89, 7.06, 26.34, false, 240, 20, 15, 26.20, 16.03, 18.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'A', 17, 'AXM477', 28.77, 7.84, 27.31, false, 246, 20, 34, 25.78, 16.24, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 1, 'AXM477', 26.73, 8.96, 27.27, false, 255, 20, 27, 28.73, 16.51, 20.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 5, 'AXM477', 26.94, 8.84, 27.71, false, 233, 20, 11, 27.26, 15.75, 19.01, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 9, 'AXM477', 27.99, 7.61, 27.04, false, 246, 20, 44, 25.03, 16.10, 22.75, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 13, 'AXM477', 25.63, 7.20, 26.01, false, 158, 14, 29, 31.22, 16.49, 30.08, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'B', 17, 'AXM477', 26.39, 7.56, 27.23, false, 239, 20, 21, 31.29, 16.70, 30.04, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 1, 'AXM477', 30.94, 8.88, 27.49, false, 235, 20, 49, 31.40, 16.68, 30.49, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 5, 'AXM477', 26.48, 8.99, 27.35, false, 231, 20, 15, 30.13, 17.11, 28.54, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 9, 'AXM477', 28.60, 8.42, 26.11, false, 224, 20, 36, 32.81, 16.84, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 13, 'AXM477', 28.41, 8.73, 27.06, false, 162, 14, 27, 21.95, 16.36, 17.56, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '16:00:00', 'C', 17, 'AXM477', 28.07, 8.06, 26.43, false, 231, 20, 24, 26.72, 16.69, 16.73, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 1, 'AXM477', 30.77, 0.51, 22.17, false, 253, 20, 4, 25.87, 16.92, 17.11, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 5, 'AXM477', 28.93, 0.52, 22.27, false, 241, 20, 46, 27.23, 16.96, 19.90, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 9, 'AXM477', 31.25, 0.51, 22.37, false, 157, 12, 22, 24.90, 16.13, 20.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 13, 'AXM477', 33.67, 0.50, 22.07, false, 242, 20, 15, 26.31, 16.39, 18.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'A', 17, 'AXM477', 32.71, 0.47, 22.35, false, 247, 20, 34, 25.97, 16.51, 22.33, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 1, 'AXM477', 30.49, 0.52, 22.41, false, 256, 20, 27, 28.92, 16.58, 20.52, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 5, 'AXM477', 27.98, 0.52, 22.12, false, 234, 20, 11, 27.38, 16.07, 19.06, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 9, 'AXM477', 31.00, 0.50, 22.23, false, 247, 20, 44, 25.19, 16.38, 22.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 13, 'AXM477', 27.04, 0.52, 22.02, false, 159, 15, 30, 31.39, 16.55, 30.10, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'B', 17, 'AXM477', 28.65, 0.50, 22.33, false, 240, 20, 21, 31.45, 16.86, 30.14, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 1, 'AXM477', 31.78, 0.48, 22.22, false, 235, 20, 50, 31.54, 16.83, 30.57, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 5, 'AXM477', 28.89, 0.47, 22.30, false, 232, 20, 16, 30.20, 17.48, 28.59, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 9, 'AXM477', 31.88, 0.52, 22.31, false, 226, 20, 37, 32.98, 17.09, 22.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 13, 'AXM477', 31.10, 0.52, 22.50, false, 163, 14, 27, 22.10, 16.51, 17.64, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '20:00:00', 'C', 17, 'AXM477', 29.96, 0.52, 22.02, false, 233, 20, 24, 26.90, 16.84, 16.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 10, 'AXM478', 26.92, 10.01, 24.24, false, 22, 20, 2, 13.66, 2.09, 5.19, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 10, 'AXM478', 23.55, 0.99, 20.95, false, 14, 10, 3, 9.26, 1.52, 2.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 10, 'AXM478', 27.55, 0.51, 22.23, false, 15, 13, 4, 9.35, 1.94, 2.44, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 10, 'AXM478', 24.40, 7.02, 26.35, false, 42, 19, 6, 20.92, 4.27, 10.84, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 10, 'AXM478', 28.03, 10.23, 24.12, false, 55, 12, 5, 18.69, 6.06, 15.46, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 10, 'AXM478', 24.03, 1.02, 21.45, false, 120, 20, 5, 20.82, 7.80, 14.45, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 10, 'AXM478', 26.61, 0.48, 22.44, false, 124, 20, 7, 21.20, 8.64, 14.66, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 10, 'AXM478', 29.35, 8.28, 27.39, false, 173, 20, 20, 17.53, 12.25, 15.02, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 10, 'AXM478', 28.31, 10.20, 24.17, false, 245, 20, 47, 29.90, 15.95, 22.43, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE, '12:00:00', 'C', 8, 'AXM480', 27.54, 9.60, 24.62, false, 13, 9, 2, 9.96, 2.51, 7.18, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '08:00:00', 'C', 8, 'AXM480', 23.84, 1.00, 21.23, false, 2, 11, 0, 9.69, 1.76, 4.42, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 1, '20:00:00', 'C', 8, 'AXM480', 29.24, 0.48, 22.21, false, 6, 13, 1, 9.91, 2.31, 4.55, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 2, '16:00:00', 'C', 8, 'AXM480', 27.59, 7.59, 27.22, false, 31, 13, 6, 14.49, 4.19, 12.76, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 3, '12:00:00', 'C', 8, 'AXM480', 26.25, 9.92, 25.78, false, 84, 20, 14, 16.51, 5.65, 9.35, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '08:00:00', 'C', 8, 'AXM480', 24.42, 1.02, 21.98, false, 103, 20, 4, 14.44, 8.47, 10.07, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 4, '20:00:00', 'C', 8, 'AXM480', 31.99, 0.52, 22.46, false, 106, 20, 6, 14.73, 9.14, 10.25, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 5, '16:00:00', 'C', 8, 'AXM480', 27.66, 8.78, 27.40, false, 105, 13, 22, 26.35, 12.79, 23.31, ''); -INSERT INTO plot_checks (date, "time", lab_id, plot, seed_sample, humidity, light, temperature, equipment_fault, blossoms, plants, fruit, max_height, min_height, median_height, notes) VALUES (CURRENT_DATE + 6, '12:00:00', 'C', 8, 'AXM480', 24.40, 9.80, 25.03, false, 140, 12, 14, 26.73, 16.53, 22.82, ''); diff --git a/Chapter16/ABQ_Data_Entry/sql/create_db.sql b/Chapter16/ABQ_Data_Entry/sql/create_db.sql deleted file mode 100644 index 011389a..0000000 --- a/Chapter16/ABQ_Data_Entry/sql/create_db.sql +++ /dev/null @@ -1,82 +0,0 @@ --- Lab techs --- Use employee ID # as primary key --- Since names can change --- Names must be unique since they will be displayed --- In a dropdown -CREATE TABLE lab_techs ( - id SMALLINT PRIMARY KEY, - name VARCHAR(512) UNIQUE NOT NULL - ); - -CREATE TABLE labs ( - id CHAR(1) PRIMARY KEY - ); - -CREATE TABLE plots ( - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - current_seed_sample CHAR(6), - PRIMARY KEY(lab_id, plot), - CONSTRAINT valid_plot CHECK (plot BETWEEN 1 AND 20) - ); - -CREATE TABLE lab_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - lab_tech_id SMALLINT NOT NULL REFERENCES lab_techs(id), - PRIMARY KEY(date, time, lab_id) - ); - -CREATE TABLE plot_checks( - date DATE NOT NULL, - time TIME NOT NULL, - lab_id CHAR(1) NOT NULL REFERENCES labs(id), - plot SMALLINT NOT NULL, - seed_sample CHAR(6) NOT NULL, - humidity NUMERIC(4, 2) CHECK (humidity BETWEEN 0.5 AND 52.0), - light NUMERIC(5, 2) CHECK (light BETWEEN 0 AND 100), - temperature NUMERIC(4, 2) CHECK (temperature BETWEEN 4 AND 40), - equipment_fault BOOLEAN NOT NULL, - blossoms SMALLINT NOT NULL CHECK (blossoms BETWEEN 0 AND 1000), - plants SMALLINT NOT NULL CHECK (plants BETWEEN 0 AND 20), - fruit SMALLINT NOT NULL CHECK (fruit BETWEEN 0 AND 1000), - max_height NUMERIC(6, 2) NOT NULL CHECK (max_height BETWEEN 0 AND 1000), - min_height NUMERIC(6, 2) NOT NULL CHECK (min_height BETWEEN 0 AND 1000), - median_height NUMERIC(6, 2) - NOT NULL CHECK - (median_height BETWEEN min_height AND max_height), - notes TEXT, - PRIMARY KEY(date, time, lab_id, plot), - FOREIGN KEY(lab_id, date, time) - REFERENCES lab_checks(lab_id, date, time), - FOREIGN KEY(lab_id, plot) REFERENCES plots(lab_id, plot) - ); - -DROP VIEW IF EXISTS data_record_view; -CREATE VIEW data_record_view AS ( - SELECT pc.date AS "Date", - to_char(pc.time, 'FMHH24:MI') AS "Time", - lt.name AS "Technician", - pc.lab_id AS "Lab", - pc.plot AS "Plot", - pc.seed_sample AS "Seed Sample", - pc.equipment_fault AS "Equipment Fault", - pc.humidity AS "Humidity", - pc.light AS "Light", - pc.temperature AS "Temperature", - pc.plants AS "Plants", - pc.blossoms AS "Blossoms", - pc.fruit AS "Fruit", - pc.max_height AS "Max Height", - pc.min_height AS "Min Height", - pc.median_height AS "Med Height", - pc.notes AS "Notes" - FROM plot_checks AS pc - JOIN lab_checks AS lc - ON pc.lab_id = lc.lab_id - AND pc.date = lc.date - AND pc.time = lc.time - JOIN lab_techs AS lt - ON lc.lab_tech_id = lt.id - ); diff --git a/Chapter16/ABQ_Data_Entry/sql/populate_db.sql b/Chapter16/ABQ_Data_Entry/sql/populate_db.sql deleted file mode 100644 index 0ba33aa..0000000 --- a/Chapter16/ABQ_Data_Entry/sql/populate_db.sql +++ /dev/null @@ -1,20 +0,0 @@ -INSERT INTO lab_techs VALUES - (4291, 'J Simms'), - (4319, 'P Taylor'), - (4478, 'Q Murphy'), - (5607, 'L Taniff') - ; - -INSERT INTO labs VALUES - ('A'), ('B'), ('C'), ('D'), ('E'); - -INSERT INTO plots (SELECT labs.id, plotnums.plot -FROM labs, (SELECT generate_series(1, 20) plot) AS plotnums); - -UPDATE plots SET current_seed_sample= - (CASE WHEN plot % 4 = 1 THEN 'AXM477' - WHEN plot % 4 = 2 THEN 'AXM478' - WHEN plot % 4 = 3 THEN 'AXM479' - WHEN plot % 4 = 0 THEN 'AXM480' - ELSE '' END) -; diff --git a/README.md b/README.md index 8cec661..a93dd87 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,2 @@ - - - # Python-GUI-Programming-with-Tkinter-2E Python GUI Programming with Tkinter 2E.Published by Packt -### Download a free PDF - - If you have already purchased a print or Kindle version of this book, you can get a DRM-free PDF version at no cost.
Simply click on the link to claim your free PDF.
-

https://packt.link/free-ebook/9781801815925

\ No newline at end of file diff --git a/errata.md b/errata.md deleted file mode 100644 index 66b9bd5..0000000 --- a/errata.md +++ /dev/null @@ -1,19 +0,0 @@ -# Errata, Corrections and Improvements ----------------------------------------------------- -If you find any mistakes in the second edition of Python GUI Programming with Tkinter, or if you have suggestions for improvements, then please [raise an issue in this repository](https://github.com/PacktPublishing/Python-GUI-Programming-with-Tkinter-2E/issues), or email to us. - -## Chapter01, Page 8 - Adding the missing alias name `tk` in the code lines - -Incorrect code is: -``` -root = Tk() - -label = Label(root, text="Hello World") -``` -Correct code is: -``` -root = tk.Tk() - -label = tk.Label(root, text="Hello World") -``` -You can find this code correct in the file here: `Chapter01/hello_tkinter.py`