Version 2.6.2
Date: 08/11/2021
Description: Bug fixing version and minor improvements

Minor:

  + Filtering Genotype by Factors is now enabled through a config option

  + Improved error handling for importing sample measurements. Entire error list from CSV is returned rather than first error encountered.

  + Fixed issue relating to permissions to delete Specimens

  + Fixed issue relating to updating trial unit locations

  + Fixed issue relating to Item "DateAdded" being mistakenly overwritten

  + Fixed issue relating to Specimen pagination count being affected by various Genotype-Specimen relationships

  + Fixed issue relating to Filtering with special characters

  + Updates to returned data for Genotypes in Specimens, Trial Traits and Crossings.

Version 2.6.1
Date: 22/01/2021
Description: Bug fixing version

  Minor:

    + Fixed issue regarding that DAL cannot update a trial that has multiple while trial name is not unique in the database.

    + Fixed issue regarding updating SiteStartDate and SiteEndDate in Sites

    + Fixed issue regarding deleting Items with Item Logs

    + Fixed issue regarding deleting Genotypes that are children in GenPedigree

    + Fixed issue regarding duplicate Extracts being returned from Analysis Groups

    + Add interface to delete Crossing

    + Add interface to delete Genotype Alias

    + List Genpedigree includes Names of Genotype and ParentGenotype



Version 2.6.0
Date: 27/02/2020
Description: Ease the integration with Online Ordering

Major:

  + Include a new field AnalysisGroupMetaData in analysisgroup table.

  + Include a new field PlateMetaData in plate table.

Minor:

  + Include TraitLevel in list trial trait.

  + Allow managers to list all users in the system.

  + Fix the order of fields in export samplemeasurement.

  + Correct the matching expression that is used to replace = with == in BOOLEX.

  + Remove trial name uniqueness checking in update trial.

  + Fix list multimedia for extract record.

Version 2.5.3
Date: 23/04/2018
Description: Fix SQL upgrade script.

Minor:

  + Fix bug in SQL upgrade script that clean up duplicate genotypealias.

Version 2.5.2
Date: 27/03/2018
Description: Fix update device register to update device id and device type id.

Minor:

  + Fix bug #4395 regarding update device register cannot update device id and device type id.

  + Expose JSON schema in Help for interfaces that takes input data in JSON format.

Version 2.5.1
Date: 21/03/2018
Description: Fix list layer attribute

Minor:

  + Fix bug #4367 for list layer attribute interface to return all fields in layerattrib table.

Version 2.5.0
Date: 16/03/2018
Description: Improved version with unique genotype alias name checking with genotype name.

Major:

  + Enforce the uniqueness of genotype name and genotype alias name within the same genus.

  + Add support for trial and trial group ayout.

  + Support having multiple instances of the same specimen in a trial unit.

  + Able to configure who can create new genotypes from the DAL configuration.

Minor:

  + Support season as general type and in trial.

  + Add count filtering to count groupby interface.

  + By default, add trial unit and add trial unit in bulk will check x, y, z uniqueness. If x, y, z uniqueness checking is not needed, force parameter can be used.

  + Support bulk update of trial units.

  + Trait and traitgroup have extra alternative optional unique identifier.

  + Make sitelocation optional when adding a new site.

  + Provide interfaces to add and retrieve the list of trial types that are defined as nursery trial types.

Version 2.4.5
Date: 10/11/2017
Description: Fix single quote bug in trait value for samplemeasurement importation

Minor:

  + Fix bug #4127 regarding single quote in trait value in samplemeasurement importation returning an error.

Version 2.4.4
Date: 30/10/2017
Description: Add interfaces to list marker data for data set

Minor:

  + Add interface to list markermeta fields from a dataset.

  + Add interface to list markers from a dataset.

  + Add interface to get a marker from a dataset.

  + Add interface to list marker data from a dataset.

  + Add interface to export marker map position in a csv format.

  + Add interface to import marker map position from map data in a marker dataset.

  + Fix bug 4077 regarding export trial data in 2D format.

  + Marker name must be unique within a single dataset.

Version 2.4.3
Date: 06/10/2017
Description: this version is a purely bug fix version to version 2.4.0.

Minor:

  + Fix bug 4003 - get project does not return VCol.

Version 2.4.2
Date: 18/07/2017
Description: this version is a purely bug fix version to version 2.4.0.

Minor:

  + Fix upgrade script so that it works in setup where mysql root password is different from kddart_dal password.

  + Fix upgrade script so that it copies all DTD files from vhosts directory.

Minor:

  + Fix help for listing specimen group which no longer returns the specimens in the group.

Version 2.4.1
Date: 26/06/2017
Description: this version is a purely bug fix version to version 2.4.0.


Minor:

  * Help for add/analysisgroup has been updated to include a reference to DTD file for XML file that must contain extract ids.

  * A bug regarding import trial data from a csv template (internal bug number 3739) is fixed.

  * Upgrade from version 2.3.2 to version 2.4.0 is available.

Version 2.4.0
Date: 12/05/2017

Major:

  * DAL cookies have domain value that the server extracts from the url.

  * It supports token as well as cookies. For a session token to work, the login URL will return the session id and the verification random number directly in the output text in addition to cookie headers. The parameter names for the session token are KDDArT_DAL_SESSID for session id and KDDArT_RANDOM_NUMBER for the verification random number.

  * One trait can be a memeber of many groups and a trait group can have many traits.

  * It supports importing samplemeasurement in groups.

  * It supports compulsary optimistic update on item.

  * Its spports bulk update of items with compulsary optimic update feature.

Minor:

  * List samplemeasurement with pagination, field list, filtering and sorting.

  * DAL can generate a multi-user unique number from MySQL autonumber for naming.

  * It supports DATE_RANGE validation rule which requires a valid date string in yyyy-dd-mm format.

  * It supports creating a new session from an existing active login session.

Detailed lists of changes from version 2.3.2 to 2.4.0

Trait group is now an independent table with new calls
* 'add/traitgroup'
* 'delete/traitgroup/_id'
* 'get/traitgroup/_id'
* 'list/traitgroup/_nperpage/page/_num'
* 'traitgroup/_id/add/trait'
* 'traitgroup/_id/remove/trait/_tid'
* 'update/traitgroup/_id'

Samplemeasure records can now be imported in a group which can be removed and reimported later. New calls
* 'delete/smgroup/_id'
* 'get/smgroup/_id'
* 'trial/_id/import/smgroupdata/csv'
* 'trial/_id/list/smgroup'
* 'update/smgroup/_id'

New call to list samplemeasurement
* 'list/samplemeasurement/_nperpage/page/_num'

New call to get a unique number from DAL
* 'get/uniquenumber'

New call to update analysis group
* 'update/analysisgroup/_id'

New call to update item in bulk
* 'update/itembulk/json'

New call to create a new session from an existing active login session
* 'clone/session'

Version 2.3.2
Date: 23/09/2016

Major:

  * Cookie authentication has been fixed with Apahce2_4::AuthCookie and mod_perl 2.0.9 which is available in openSUSE Leap 42.1 and CentOS 7.

  * Permission fields are added to specimen table and the values of these fields are copied from genotype by DAL when a new specimen is created. When any of the permission fields in the genotype table is updated, all values in all the permission fields in the genotype are replicated to their corresponding fields in the specimen table via SQL after update trigger on genotype table. To help with specimens with multiple genotypes, genotypespecimen table has a new field named InheritanceFlag. This field is used by the trigger script for the permission value replication. This improves the speed of the list specimen with pagination.

  * Table for multiloctrial has been renamed to trialgroup and its fields' name are renamed as well.

  * Search interface via Solr enterprise search engine has been improved with proper error handling. There are 2 new interfaces to list all available Solr cores and list entities in each Solr core.

  * Every DAL interface will return the time the server takes to execute the DAL code at the server side. This time excludes client processing, network traffic, and the web server handling. However, this information will help isolate performance problems and help future performance optimisation work.

  * New interface to list marker data for specific extract across all datasets in the system with a defined dataset type.

Minor:

  * The performance of add/update specimen interfaces has been improved.

  * The performance of list genotype interface for a specific specimen has been improved.

  * The performance of list aliases interface for a specific genotype has been improved.

  * The performance of import item interface has been improved.

  * List specimen keyword interface supports pagination and filtering.

  * There is a new interface to append marker data to an existing dataset to help loading 2GB+ marker data set.

  * Bug regarding missing DateAdded and Active fields in import itemgroup has been fixed.

  * DAL supports a point for a site or a trial as well as polygon and multi polygon as the shape for its geometry object.

Detailed list of changes from version 2.3.0 to 2.3.2:

  User and group related calls:
* 'user/_username/reset/password' - has been depreciated
* New calls were added:
** 'get/userpreference'
** 'update/userpreference'
** 'update/group/_id'

Search functionality
* New calls were added
** 'list/solrcore'
** 'solrcore/_core/list/entity'
** 'search/_core/_nperpage/page/_num'

Item units are now replaced by generalunits - depreciated calls:
* 'add/itemunit'
* 'delete/itemunit/_id'
* 'update/itemunit/_id'
* 'get/itemunit/_id'
* 'list/itemunit'

Whole new set of calls related to keywords:
* 'add/keyword'
* 'update/keyword/_id'
* 'list/keyword/_nperpage/page/_num'
* 'get/keyword/_id'
* 'delete/keyword/_id'
* 'add/keywordgroup'
* 'update/keywordgroup/_id'
* 'list/keywordgroup/_nperpage/page/_num'
* 'get/keywordgroup/_id'
* 'keywordgroup/_id/add/keyword/bulk'
* 'keywordgroup/_id/list/keyword'
* 'keywordgroup/_id/remove/keyword/_kwdid'
* 'delete/keywordgroup/_id'

Attaching keywords to specimens:
* 'specimen/_id/add/keyword'
* 'specimen/_id/list/keyword/_nperpage/page/_num'
* 'specimen/_id/list/keyword'
* 'list/specimenkeyword/_nperpage/page/_num'
* 'remove/specimenkeyword/_id'

Attaching keywords to trial units
* 'import/trialunitkeyword/csv'
* 'trialunit/_id/list/keyword/_nperpage/page/_num'
* 'trialunit/_id/list/keyword'
* 'list/trialunitkeyword/_nperpage/page/_num'
* 'trialunit/_id/add/keyword'
* 'remove/trialunitkeyword/_id'

New calls to support more options in genotype pedeigree
* 'import/genpedigree/csv'
* 'export/genpedigree'
* 'update/genpedigree/_id'
* 'delete/genpedigree/_id'

New calls for crossing design in trial (nursery):
* 'import/crossing/csv'
* 'trial/_trialid/list/crossing'

Unit positions has been re-factored, are related calls depreciated:
* 'add/unitposition'
* 'list/unitposition'
* 'get/unitposition/_id'
* 'update/unitposition/_id'
* 'list/unitpositionfield'
* 'delete/unitposition/_id'

Multiloc trials has been renamed to more generic trialgroup

* Depreciated list of calls:

** 'add/multiloctrial'
** 'update/multiloctrial/_id'
** 'list/multiloctrial/_nperpage/page/_num'
** 'get/multiloctrial/_id'
** 'delete/multiloctrial/_id'
** 'multiloctrial/_id/add/trial'
** 'multiloctrial/_id/remove/trial/_tid'

* Replacement calls:

** 'add/trialgroup'
** 'update/trialgroup/_id'
** 'list/trialgroup/_nperpage/page/_num'
** 'get/trialgroup/_id'
** 'delete/trialgroup/_id'
** 'trialgroup/_id/add/trial'
** 'trialgroup/_id/remove/trial/_tid'

New call to bulk import extracts for a plate:
* 'import/plate/n/extract/xml'

New way to list extracts with pagination:
* Depreciated call: 'list/extract'
* Replacement call: 'list/extract/_nperpage/page/_num'

More new ways to list extracts:
* 'plate/_plateid/list/extract'
* 'dataset/_dsid/list/extract'

More flexible way to list marker data (removing one marker limit):
* Depreciated call: 'analysisgroup/_analid/marker/_mrkid/list/data/_nperblock/block/_num'
* Replacement call: 'list/extractmarkerdata/_nperpage/page/_num/n/_nperblock/block/_bnum'

Depreciated calls from environment module related to valuetype (now use generalunit):
* 'list/layerattrib/valuetype'
* 'add/layerattrib/valuetype'
* 'update/layerattrib/valuetype/_id'
* 'get/layerattrib/valuetype/_id'
* 'delete/layerattrib/valuetype/_id'

Error info has been depreciated:
* 'get/errorinfo/_id'

Version 2.3.1-1
Date: 16/05/2016

Major:

  * Listing extract marker data across all accessible datasets on the same dataset type with full marker and extract filtering.

  * Optimisation for large (100k+ extract) marker dataset importation.

  * Search prototype based on Solr search solution.

Minor:

  * Listing and exporting marker data from an analysis group or dataset supports filtering on an individual extract score, for example, E_6107=1&CallRate>0.95, which lists all markers that have scored 1 for extract 6107 and have CallRate above 0.95.

  * Exporting marker data supports extract filtering in addition to the existing marker filtering and extract field list.

  * Level attribute in ancestor and descendant records is correctly reported.

Version 2.3.1
Date: 18/12/2015

Major:

  * Cookie expiry when logging out is reverted to -1d. In version 2.2.7 and 2.3, when DAL session is logged out, DAL keep the expiry of the cookies the same but set the cookie values to empty strings. Before these versions, the logout will set the cookie expiry to -1d. However, there were some issues with multimedia file download. Once easy solution to the multimedia file download issue at the time was not chnage the cookie expiry setting. However, this change caused a problem for the new KDSen online which relies on the logout setting cookie expiry to -1d. In terms of downloading multimedia files, a proper solution was in place. So both issues should be fixed.

  * Support keyword management, trial unit keyword and specimen keyword.

  * Support sub-plot scoring by having TrialUnitSpecimenId as an optional field in samplemeasurement table.

Minor:

  * import/itemgroup/xml is faster by using SQL bulk record insert.

  * add/plate/n/extract is more up-to-date with the schema and faster. It now uses SQL bulk insert to create extract records.

List of CHANGES from version 2.2.5 to 2.3

Feature changes:

- There are 61 new interfaces introduced in the new version. See details below.

- 9 interfaces has been removed. Carefully review information below.

- 6 interfaces has been renamed. All details and explanations below.

- Marker module has been re-implemented into a new database back-end. It uses now MonetDB for large table storage. It means vast improvements in speed and efficiency.

- Marker module now supports more than one dataset per analysis. Associated interface changes:
  * analysisgroup/_id/list/dataset
  * dataset/_datasetid/export/markerdata/csv

- Additionally to csv export there is now an option to list marker data in pages and column blocks. Added interfaces are:
  * analysisgroup/_analid/list/marker/_nperpage/page/_num
  * analysisgroup/_analid/get/marker/_id
  * analysisgroup/_analid/list/markerdata/_nperpage/page/_num/n/_nperblock/block/_bnum

- Now there is a full support for marker maps storage. New interfaces added:
  * add/markermap
  * update/markermap/_id
  * list/markermap
  * get/markermap/_id
  * markermap/_mrkmapid/import/mapposition/csv
  * markermap/_mrkmapid/list/mapposition/_nperpage/page/_num

- Concept of measurement units vocabulary has been re-worked. Now it is generic and centralized across the entire system. See renamed interfaces:
  * add/generalunit (from previous URL: add/itemunit)
  * delete/generalunit/_id (from previous URL: delete/itemunit/_id)
  * update/generalunit/_id (from previous URL: update/itemunit/_id)
  * get/generalunit/_id (from previous URL: get/itemunit/_id)
  * list/generalunit/_nperpage/page/_num (from previous URL: list/itemunit)

- Following the change in measurement units vocabulary concept, layerattrib table in Environmental GIS module has been removed and now uses generalunit table. Thus number of interfaces has been removed:
  * list/layerattrib/valuetype
  * add/layerattrib/valuetype
  * update/layerattrib/valuetype/_id
  * get/layerattrib/valuetype/_id
  * delete/layerattrib/valuetype/_id

- Units vocabulary now also support unit conversion rules. New interfaces are:
  * generalunit/_id/add/conversionrule
  * delete/conversionrule/_id
  * update/conversionrule/_id
  * list/conversionrule
  * get/conversionrule/_id

- Breeding method support has been extended. Now supports acronyms and better pedigree strings definitions.

- Specimen lists support has been extended. System user has a better control of ownership and sharing germplasm resources.

- Trial unit positions concept has been re-worked. trialunitpostion table and it's factor is no longer present in the database. trialdimension table has been introduced and relevant changes has been done to the trialunit table instead. Please, see database schema for model changes details.

  REMOVED INTERFACES:
  * list/unitposition
  * get/unitposition/_id
  * update/unitposition/_id
  * delete/unitposition/_id

  NEW INTERFACES:
  * trial/_id/add/dimension
  * trial/_id/list/dimension
  * get/trialdimension/_id
  * update/trialdimension/_id
  * delete/trialdimension/_id

- Support for workflows definition and workflow data for trials has been completed.
  * add/workflow
  * update/workflow/_id
  * delete/workflow/_id
  * list/workflow
  * get/workflow/_id
  * workflow/_id/add/definition
  * update/workflowdef/_id
  * workflow/_id/list/definition
  * get/workflowdef/_id
  * delete/workflowdef/_id
  * trial/_id/add/workflow
  * update/trialworkflow/_id
  * trial/_id/list/workflow
  * get/trialworkflow/_id
  * delete/trialworkflow/_id

- Trials can now be assembled into multi-location groups. New interfaces:
  * add/multiloctrial
  * update/multiloctrial/_id
  * list/multiloctrial/_nperpage/page/_num
  * get/multiloctrial/_id
  * delete/multiloctrial/_id
  * multiloctrial/_id/add/trial
  * multiloctrial/_id/remove/trial/_tid

- Better (broader) support of trait validation rules - now includes CHOICE and RANGE.

- Better GeoJSON support in Environmental GIS module.

- Extended support for layer and layer data management. Layer2d is now fully supported too. New interfaces:
  * delete/layer/_id
  * update/layerattrib/_id
  * delete/layerattrib/_id
  * layer/_id/list/data/_nperpage/page/_num
  * layer/_id/add/data
  * layer/_id/update/data
  * layer/_id/delete/data
  * layer2d/_id/add/data
  * layer2d/_layerid/update/data/_recid
  * layer2d/_layerid/list/data/_nperpage/page/_num
  * layer2d/_layerid/get/data/_recid
  * layer2d/_layerid/delete/data/_recid

- DAL can now be configured to authenticate against Google OAuth2 protocol. New interface:
  * oauth2google

- Extra interfaces added to manage multimedia:
  * get/multimedia/_id
  * update/multimedia/_id
  * delete/multimedia/_id

- New interface to import inventory data in bulk:
  * import/item/csv

- Count group by interface added. Useful to count records per values in tables:
  * _tname/countgroupby/_nperpage/page/_num

- System group management interfaces has been renamed:
  * group/_id/add/member/_username (from previous URL: group/_id/add/member/_username/_random)

- All configuration settings are now moved to a configuration file.

- DAL now checks the maximum length of all text fields. If the input is longer than the maximum number of characters specified in the database, DAL will return a DAL error with an HTTP status error code of 420.

- Number of bug fixes and a lot of new test cases added.

Version 2.3
Date: 19/10/2015

Major:

+ Marker data is stored in MonetDB.

+ Config is moved from Common.pm to kddart_dal.cfg.

+ Workflow is supported.

+ Unit position is replaced with trial dimension.

Minor:

+ List user will return all users if the login group is the admin group with an ID of zero; otherwise the interface will return only the users in the current login group.

+ Support geojson for list and get trial.

+ Support filtering on null value.

Version 2.2.7

Minor:

+ Check max len for all varchar fields.

+ Change empty string to undef as the default value for datetime.

+ Change the temporary directory from '/tmp/kddart' to '/srv/www/tmp/kddart'. Apache2.4 on openSuSe 13.2 cannot write to '/tmp/kddart'.

+ Fix bug 886 which prevents '3>2.3,4' which is valid in Perl from being a valid boolean expression.

+ RANGE, BERANGE, LERANGE and RERANGE supports floating point numbers and negative values.

+ Google OAuth2 callback is supported. With Google OAuth2 support, DAL returns the username when the login or google oauth2 callback is successful in addition to the user id and the write token.

+ Support BOOLEX((x>0 and x<10) or x eq 'NA').

+ Admin user password is changed to 'kddartadmin'.


Version 2.2.6

Major:

+ Add, update, get and list and import markermap are available.

+ Count group by interface is available.

+ Cookie authetication is upgraded to check and protect files under storage directory which stores marker data and multimedia files.

+ Instance number is based on both TraitId and TrialId. In previous versions of DAL, instance number is like a auto number. From this version onward, instance number is incremented based on the specific trial.

+ GIS/Environment module: 2D layer type is supported.

Minor:

+ New interfaces to list marker in an analysisgroup.

+ Update layer supports changing layertype and geometry type if the layer does not any data yet.

+ Filtering parameter is available for update item.

+ Fix GenotypeSpecimenType perl variable declaration bug (#1735).

+ Fix update trial unit specimen bug (#1434).

+ Apache configuration changes for storage directory.

+ Fix instance number column which does not have data in export KDSmart data.

+ Export samplemeasurement csv can take TrialIdCSV as its additional filtering parameter. If TrialUnitIdCSV is provided as well, the export will only return the intersected records that match both TrialId and TrialUnitId filtering criteria (feature #1511).

+ Fix bug #1481 when the number of trait replicates for all the traits in the selected trial is all zero, DAL will return an error 'No trait selected'.

+ Fix bug #1776 regarding missing field in list layer and get layer interfaces.

Version 2.2.5

Major:

+ DAL HTTP error is changed from 401 to 420 for all errors, except for login required error, group selection required error, group administration required error and the errors in login/_username/_rememberme.

Minor:

+ Enable adding an empty plate without any extract.

+ List/field now returns field descriptions as well.

+ First release of online help for every interface.

+ login/_username/_rememberme is put back in the list of operations.

Version 2.2.4

Major:

+ Online help is available for some operations.

+ update/layer/:id is available.

+ Add SpecimenNote to specimengroupentry affecting list/specimengroup/:nperpage/page/:num, get/specimengroup/:id, add/specimengroup, specimengroup/:specgrpid/add/specimen.

+ Prior to version 2.2.4, add/specimengroup and specimengroup/:specgrpid/add/specimen used to take duplicate SpecimenId. Duplicate checking is in place in DAL v2.2.4.

Minor:

+ Fix download datakapture template link when the trial has no trial unit.

+ list/layer provides lastrecorddate for all the layer attributes which has data.


Version 2.2.3

Major:

+ Fix slowness in list small tables like list/breedingmethod. list/breedingmethod was slow in version 2.2.2 because for every breedingmethod DAL checks if this breeding method is used in specimen table or not. If it is not used, DAL will give a delete link. The fix for all list interface is that DAL checks if the record is used in other tables for the delete link in bulk. This improveslist/breedingmethod from 25 seconds to 400 milliseconds. Bulk checking for delete link and other related database record lookup is introduced in this version.

+ Add the filtering feature to list/sepcimengroup and list/itemgroup. This means that list/specimengroup and list/itemgroup are replaced with list/specimengroup/:nperpage/page/:num and list/itemgroup/:nperpage/page/:num.

+ Introduce list/pedigree/:nperpage/page/:num and list/genpedigree/:nperpage/page/:num.

Minor:

+ Make add/specimengroup to accept the situation when specimen is not provided. This is done by modifying specimengroup.dtd.

Version 2.2.2

Major:

+ Genotype alias has type, status and language fields.
+ Introduction of genotype pedigree in addition to specimen pedigree. Genotype pedigree or gen pedigree is seen as the breeding history (pedigree) while specimen pedigress is seen as selection history.
+ Add/list multimedia files for genotype, specimen and site.
+ Being able to filter on factor columns in organisation, contact, site, trial and project.

Minor:

+ Listing genotype alias supports advanced features including filtering.
+ List genotype ancestor and descendant are available.
+ List specimen ancestor and descendant are available.
+ Add, list and get barcodeconf are available.
+ list/factor returns all fields in the factor table.
+ 'factor/table/:tname/add/vcolumn' becomes 'factortable/:tname/add/vcolumn'.

----------------------------------------------------------------------------------------

Version 2.2.1

This is a minor release to enable uploading large marker data files of more than several hundreds megabytes.

Major:

+ Changes in marker module schema in order to store marker data in the csv file
+ Import marker data is now based on a csv file storage system.
+ Export marker data is also based on the csv file storage system.
+ Export marker data supports filtering and field selection. Field selection is controlled by two optional parameters (MarkerMetaFieldList and MarkerDataFieldList).

Minor:

+ Analysisgroup has an interface to list the meta data fields.
+ Due to circular foreign key references between item and trialunitspecimen and other tables and time constraint, the foreign key references are not available in the database schemas embedded with this release.
