MAJOR CHANGE: moved sql_lib() from M::Base to new M::Role::Query; moved all M::R::QueryFormatter methods into M::R::Query; removed sql_lib() from ScriptHelpers - using new M::Roles::Query method; removed lims_dbix() from M::Base - now loaded via M::Role::DBIxSimple on demand; moved get_sql_with_constraint() from M::R::DBIxSimple to M::R::Query; method gets dbh from lims_db not lims_dbix in M::LabSection::update_lab_sections() & M::Specimen::update_specimens(); added elements() to Local::QueryLibrary
refactored L::Utils::get_yaml to only require args needed for construction of path/to/yaml_dir/filename to remove duplication from components requiring a get_yaml_file() method (Controllers, Model & ScriptHelpers)
moved some LIMS::Base methods out to LIMS::Role::Base; new cron mail_reports.pl - shares some methods from LIMS; exempted http requests to Chart methods from authentication to allow mail_reports.pl script to generate charts
replaced several calls to L::Local::find_home() with call to config instance; removed call to L::Local::Debug from lims_config.pl, as debug() uses config instance, which uses lims_config.pl; model classes get config from config instance instead of constructor passing it in LIMS::model(); general tidy-up
replaced multiple calls to load config settings with LIMS:Local::Config->instance(), using Class::Singleton to ensure config file opened & read only once at server startup
local changes for Bristol update: emailed messages contain test notice only if not in production; unreported requests worklist duration taken from config settings; config settings made available to Model classes; moved report output formatting to local template if not RR8